postgresql - SqlAlchemy/Postgresql ORM:进行子查询,计算 jsonb 中 ID 的实例
问题描述
我想我几乎拥有它,但我的子查询似乎得到了每个对象的总数。不是包含特定 ID 的对象的计数。有人可以帮我修复它,以便它只计算所有具有相同 ID 的对象吗?注意:这变得更加复杂,因为我要检查的 ID 在 JSONB 中。
我有两张表(我将大大简化我们正在使用的内容)表 1:公司
- ID
- 姓名
- 等等。。
表 2:消息数据:
- ID
- 数据(可能包含也可能不包含名为 company_id 的字段的 json blob)
- 等等。。
我最终希望我的查询返回一个像这样的数据集:
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 的计数。
解决方案
我不得不改变我的主要查询。上面编辑
推荐阅读
- database - Pojo 类中对象列表的 Mybatis 属性映射器错误:spring Boot/mybatis
- kubernetes - Kubernetes v1.21.2:“selfLink 为空,无法引用”
- javascript - 矩阵变量在javascript中未定义
- tensorflow - 使用“tf.compat.v1.metrics.auc”的最佳实践?
- android - 模拟器或物理设备的 AOSP Android 12 Beta2 版本构建失败
- python - 使用 seaborn 创建多条曲线
- android - 如何使用 CameraX 录制没有音频的视频
- node.js - 谷歌云上的 NodeJs Docker 部署运行
- regex - vscode 跨文件查找和替换,如果多个匹配在同一行上,则重复反向引用
- vue.js - appvue 需要一个元素 (vue2)