从多列创建 JSON 对象数组

Yuv*_*man 8 arrays postgresql aggregate-functions jsonb postgres-9.6

我这里有以下数据集

ID 钥匙 类别 平均时间_1 平均时间_2
1 1 10 10 20
2 1 20 30 40
3 2 10 10 50
4 2 20 60 70

Sqlfiddle。

我想创建一个查询,结果如下:

钥匙 平均时间_1 平均时间_1
1 [{“类别”:10,“平均时间”:10},{“类别”:20,“平均时间”:20}] [{“类别”:10,“avg_time”:20},{“类别”:20,“avg_time”:40}]
2 [{“类别”:10,“平均时间”:10},{“类别”:20,“平均时间”:60}] [{“类别”:10,“avg_time”:50},{“类别”:20,“avg_time”:70}]

这个想法只是以不同的方式重新表示值 colsavg_time_1和jsonb 值。avg_time_2

kli*_*lin 15

用于jsonb_build_object()构建主要对象并将jsonb_agg()它们聚合到 json 数组中:

select 
    key, 
    jsonb_agg(jsonb_build_object('category', category, 'avg_time', avg_time_1)) as avg_time_1,
    jsonb_agg(jsonb_build_object('category', category, 'avg_time', avg_time_2)) as avg_time_2
from data_to_agg_json
group by key

 key |                              avg_time_1                              |                              avg_time_2                              
-----+----------------------------------------------------------------------+----------------------------------------------------------------------
   1 | [{"avg_time": 10, "category": 10}, {"avg_time": 30, "category": 20}] | [{"avg_time": 20, "category": 10}, {"avg_time": 40, "category": 20}]
   2 | [{"avg_time": 10, "category": 10}, {"avg_time": 60, "category": 20}] | [{"avg_time": 50, "category": 10}, {"avg_time": 70, "category": 20}]
(2 rows)    
Run Code Online (Sandbox Code Playgroud)

数据库<>小提琴。