【发布时间】:2020-11-30 04:29:06
【问题描述】:
我想我几乎拥有它,但我的子查询似乎得到了每个对象的总数。不是包含特定 ID 的对象的计数。有人可以帮我修复它,以便它只计算所有具有相同 ID 的对象吗? 注意:这变得更复杂了,因为我要检查的 ID 在 JSONB 中。
我有两张桌子(我将大大简化我们的工作) 表 1:公司
- 身份证
- 姓名
- 等等..
表 2:消息数据:
- 身份证
- 数据(可能包含也可能不包含名为 company_id 的字段的 json blob)
- 等等..
我最终希望我的查询返回如下数据集:
ID : 00000000-0000-0000-0000-000000000000
Name: Random Company Name here
Message Count: 12
我当前的子查询看起来像这样(基于另一个堆栈溢出问题SQL Query that relies on COUNT from another table? - SQLAlchemy)
session.query(MessageData.data['company_id'].label('company_id'), func.count('*').label('message_count')).group_by(MessageData.data['company_id']).subquery()
我的主要查询是这样的
使用解决方案编辑:我必须像示例中一样添加外连接
session.query(Company.id, Company.name, subquery.c.message_count).outerjoin(subquery, subquery.c.company_id == Company.id).all()
但消息计数始终具有相同的值,我假设它是 MessageData 的每个实例的计数,而不仅仅是包含该公司 ID 的实例的计数。
【问题讨论】:
标签: postgresql orm sqlalchemy