Postgres 9.6 - jsonb 列中特定字段的平均值,并按同一 jsonb 列中的另一个字段分组
Postgres 9.6 - average on specific field in a jsonb column and group by another field on the same jsonb column
我在此处显示了以下数据集
http://sqlfiddle.com/#!17/f9280/1
我想查询数据的方式是 每个键和类别 平均排名
例如,
键 1,类别 10,avg_rank:95
键 1,类别 20,avg_rank:75
键 2,类别 11,avg_rank:105
键 2,类别 12,avg_rank:80
任何有关如何在 Postgres 上执行此操作的帮助或良好参考将不胜感激 :)
在横向连接中使用 jsonb_array_elements(data)
:
select
key,
value->>'category' as category,
avg((value->>'rank')::numeric) as rank
from jsonData
cross join jsonb_array_elements(data)
group by key, category
key | category | rank
-----+----------+----------------------
1 | 10 | 95.0000000000000000
1 | 20 | 75.0000000000000000
2 | 11 | 105.0000000000000000
2 | 12 | 80.0000000000000000
(4 rows)
我在此处显示了以下数据集
http://sqlfiddle.com/#!17/f9280/1
我想查询数据的方式是 每个键和类别 平均排名
例如,
任何有关如何在 Postgres 上执行此操作的帮助或良好参考将不胜感激 :)
在横向连接中使用 jsonb_array_elements(data)
:
select
key,
value->>'category' as category,
avg((value->>'rank')::numeric) as rank
from jsonData
cross join jsonb_array_elements(data)
group by key, category
key | category | rank
-----+----------+----------------------
1 | 10 | 95.0000000000000000
1 | 20 | 75.0000000000000000
2 | 11 | 105.0000000000000000
2 | 12 | 80.0000000000000000
(4 rows)