我有一个关系表,其中包含三个变量值、一个 ID 和分解成多个部分的日期。
ID | Year | Month | Day | A | B | C |
1 2019 12 01 5 10 15
1 2019 12 02 2 4 6
1 2019 11 01 1 2 3
1 2019 11 02 10 9 8
目标是将该数据聚合到一个 JSONB/关系表中,其中 A、B 和 C 列在一个 JSONB 对象中:{A:5, B:10, C:15} 这是另一个值以日期为键的 JSONB 对象。
{01:{A:5, B:10, C:15}}
此外,我想聚合数据,以便每个月的所有数据都在一个对象中,最终结果如下所示:
ID | Year | Month | Data |
1 2019 12 {01:{A:5, B:10, C:15},02:{A:2, B:4, C:6}}
1 2019 11 {01:{A:1, B:2, C:3},02:{A:10, B:9, C:8}}
我已经能够为每天创建一行数据,但我无法按月、年和 ID 汇总它们。
如有任何帮助,我们将不胜感激。
最佳答案
您可以使用 json_build_object()
和 json_object_agg()
:
select
id,
year,
month,
json_object_agg(day, json_build_object('A', A, 'B', B, 'C', C)) "data"
from mytable
group by
id,
year,
month
| id | year | month | data |
| --- | ---- | ----- | --------------------------------------------------- |
| 1 | 2019 | 11 | {"1":{"A":1,"B":2,"C":3},"2":{"A":10,"B":9,"C":8}} |
| 1 | 2019 | 12 | {"1":{"A":5,"B":10,"C":15},"2":{"A":2,"B":4,"C":6}} |
关于sql - 在 Postgres 上的关系表上聚合 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513658/