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 |
我想创建一个查询,结果如下:
| 钥匙 | 平均时间_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)
| 归档时间: |
|
| 查看次数: |
8388 次 |
| 最近记录: |