给出如下数据:
+---+------------+------------
|id | change | date
+---+------------+------------
| 1 | name | 2018-06-20
| 2 | address | 2018-06-20
| 3 | email | 2018-06-20
| 4 | email | 2018-06-21
| 5 | address | 2018-06-22
| 6 | address | 2018-06-23
我正在尝试创建一个视图,将以上内容总结为一个json列,其中包含以下数据:
{"name":["2018-06-20"], "address":["2018-06-20","2018-06-22","2018-06-23"], "email":["2018-06-20","2018-06-21"]}
我一直在尝试使用array_aggr,array_to_json,json_agg,array_build_object函数来弄清楚,但我似乎不太正确。
我希望有人能提供帮助。
欢呼
答案 0 :(得分:1)
您应该在两个级别上两次使用jsonb聚合:
select jsonb_pretty(jsonb_object_agg(change, dates))
from (
select change, jsonb_agg(date) as dates
from my_table
group by change
) s
jsonb_pretty
-----------------------
{ +
"name": [ +
"2018-06-20" +
], +
"email": [ +
"2018-06-20",+
"2018-06-21" +
], +
"address": [ +
"2018-06-20",+
"2018-06-22",+
"2018-06-23" +
] +
}
(1 row)
请注意,jsonb_pretty()
是不必要的,仅用于良好的输出。