我已經看到很多關于使用 json_array_elements 提取 JSON 陣列元素的參考資料。但是,這似乎僅適用于 1 個陣列。如果我在通用查詢中使用它,我會收到錯誤
ERROR: cannot call json_array_elements on a scalar
鑒于這樣的事情:
| 命令 |
|---|
| { "order_id":"2", "items": [{"name": "apple","price": 1.10}]} |
| { "order_id": "3","items": [{"name": "apple","price": 1.10},{"name": "banana","price": 0.99}]} |
我想提取
| 物品 | 數數 |
|---|---|
| 蘋果 | 2 |
| 香蕉 | 1 |
或者
| 物品 | total_value_sold |
|---|---|
| 蘋果 | 2.20 |
| 香蕉 | 0.99 |
是否可以使用 json_array_elements 聚合這樣的 json 陣列?
uj5u.com熱心網友回復:
使用函式orders->'items'來展平資料:
select elem->>'name' as name, (elem->>'price')::numeric as price
from my_table
cross join jsonb_array_elements(orders->'items') as elem;
從展平的資料中很容易得到你想要的聚合:
select name, count(*), sum(price) as total_value_sold
from (
select elem->>'name' as name, (elem->>'price')::numeric as price
from my_table
cross join jsonb_array_elements(orders->'items') as elem
) s
group by name;
Db<>小提琴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418789.html
標籤:
