jot*_*mon 3 postgresql json aggregate-functions
我的数据库中有两列,一列是 uid (myuid),另一列是代表每个用户宠物总数的键值对 (totalpetsjson)。我想查询 uid,然后对键匹配的结果 JSON 行求和。
这个查询
SELECT totalpetsjson FROM mytable WHERE "myuid" IN ('john','andy')
Run Code Online (Sandbox Code Playgroud)
结果分为两行
{'dogs':3,'cats':5,'fish':144}
{'dogs':2,'lizards':4,'cats':3'}
Run Code Online (Sandbox Code Playgroud)
我想要的结果是什么。我如何查询并组合上面两行,如下所示?
{'dogs':5,'cats':8,'fish':144,'lizards':4}
Run Code Online (Sandbox Code Playgroud)
json_each_text()使用给出pairs的函数(key, value),将其转换values为整数并按groups将它们求和keys。最后将结果聚合为json:
select json_object_agg(key, sum)
from (
select key, sum(value::int)
from my_table
cross join json_each_text(totalpetsjson)
where myuid in ('john','andy')
group by key
) s
json_object_agg
---------------------------------------------------------
{ "fish" : 144, "lizards" : 4, "cats" : 8, "dogs" : 5 }
(1 row)
Run Code Online (Sandbox Code Playgroud)
在 db<>fiddle 中测试它。
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |