在我的postgres数据库(v12.0)中有如下表结构
id | pieces | item_id | material_detail
---|--------|---------|-----------------
1 | 10 | 2 | [{"material_id":1,"pieces":10},{"material_id":2,"pieces":20},{"material_id":3,"pieces":30}]
2 | 20 | 2 | [{"material_id":1,"pieces":40}
3 | 30 | 3 | [{"material_id":1,"pieces":20},{"material_id":3,"pieces":30}
我使用groupby查询这个记录,如下所示
SELECT SUM(PIECES) FROM detail_table GROUP BY item_id HAVING item_id =2
用它我可以得到30块。但是我怎样才能从material\u detail group中按material\u id得到总件数呢。
我想要这样的结果
pieces | material_detail
-------| ------------------
30 | [{"material_id":1,"pieces":50},{"material_id":2,"pieces":20},{"material_id":3,"pieces":30}]
由于我来自mysql,我不知道如何在postgres中使用json字段来实现这一点。
注:物料明细栏为jsonb型。
1条答案
按热度按时间zengzsys1#
你在两个不同的层次上聚合。我想不出一个解决方案不需要两个单独的聚合步骤。此外,要聚合物料信息,必须先取消项目id的所有数组,然后才能聚合每个物料id的实际工件值。然后必须将其聚合回json数组。
在线示例