首页 > 解决方案 > SqlAlchemy/Postgresql ORM:进行子查询,计算 jsonb 中 ID 的实例

问题描述

我想我几乎拥有它,但我的子查询似乎得到了每个对象的总数。不是包含特定 ID 的对象的计数。有人可以帮我修复它,以便它只计算所有具有相同 ID 的对象吗?注意:这变得更加复杂,因为我要检查的 ID 在 JSONB 中。

我有两张表(我将大大简化我们正在使用的内容)表 1:公司

  1. ID
  2. 姓名
  3. 等等。。

表 2:消息数据:

  1. ID
  2. 数据(可能包含也可能不包含名为 company_id 的字段的 json blob)
  3. 等等。。

我最终希望我的查询返回一个像这样的数据集:

ID : 00000000-0000-0000-0000-000000000000
Name: Random Company Name here
Message Count: 12

我当前的子查询看起来像这样(基于依赖于另一个表中的 COUNT 的其他堆栈溢出问题 SQL Query?- 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 的计数。

标签: postgresqlormsqlalchemy

解决方案


我不得不改变我的主要查询。上面编辑


推荐阅读