Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 计算嵌套jsonb数组中项的总和_Postgresql_For Loop_Sum_Jsonb - Fatal编程技术网

Postgresql 计算嵌套jsonb数组中项的总和

Postgresql 计算嵌套jsonb数组中项的总和,postgresql,for-loop,sum,jsonb,Postgresql,For Loop,Sum,Jsonb,因此,我有一个Postgres DB表'purchases',其中有'id'和'receive'列id'是主int列,“receive”列中的值是jsonb,可以如下所示: { "shop_name":"some_shop_name", "items": [ { "name": "foo", "spent": 49, &q

因此,我有一个Postgres DB表'purchases',其中有'id'和'receive'列id'是主int列,“receive”列中的值是jsonb,可以如下所示:

{
  "shop_name":"some_shop_name", 
  "items": [
    {
      "name": "foo", 
      "spent": 49,
      "quantity": 1
    },     
    {
      "name": "bar", 
      "price": 99,
      "quantity": 2
    },
    {
      "name": "abc", 
      "price": 999,
      "quantity": 1
    },
    ...
  ]
}
收据中可以有不同数量的项目

最后,我需要编写一个查询,以便生成的表包含表中每个购买的所有栏上的购买id和花费金额,如下所示:

身份证件 花费 1. 198 .. ...
您可以使用横向连接和
jsonb_数组_元素
函数从
receipt
列中取消对
项的测试,如:

SELECT p.id, SUM((item->>'price')::NUMERIC)
FROM purchases p,
LATERAL jsonb_array_elements(p.receipt->'items') r (item)
GROUP BY p.id
还可以添加where条件,例如:

WHERE item->>'name' = 'bar