Postgres使用重复的ID转换JSON

时间:2019-05-31 22:04:06

标签: json postgresql aggregate-functions

通过此选择:

json_agg(json_build_object("id", price::money))

我得到结果值:

[
  {"6" : "$475.00"}, 
  {"6" : "$1,900.00"},
  {"3" : "$3,110.00"},
  {"3" : "$3,110.00"}
]

我希望使用这种格式的数据:

{
  "6": ["$475.00","$1,900.00"],
  "3": ["$3,110.00","$3,110.00"]
}

在服务器上查询或与jsonb一起使用时,这些ID是重复的,并且只有一对键值可以使它们通过。

1 个答案:

答案 0 :(得分:2)

您应按ID分组汇总价格,并使用汇总函数json_object_agg()。您必须使用派生表(from子句中的子查询),因为聚合不能嵌套:

select json_object_agg(id, prices)
from (
    select id, json_agg(price::money) as prices
    from my_table
    group by id
    ) s

Working example in rextester.