通过PostgreSQL中的JSON列表求和

通过PostgreSQL中的JSON列表求和,sql,json,postgresql,Sql,Json,Postgresql,我有一个列,其中包含以下格式的字符串条目(例如) 我想将每个条目中的税额相加,得到每行的总税额。如何在PostgreSQL中做到这一点?您可以使用JSONB\u POPULATE\u RECORDSET()函数,例如 WITH t(js) AS ( SELECT '[ { "state" : "CA", "tax_amount" : 3}, { "state" : "AZ"

我有一个列,其中包含以下格式的字符串条目(例如)


我想将每个条目中的税额相加,得到每行的总税额。如何在PostgreSQL中做到这一点?

您可以使用
JSONB\u POPULATE\u RECORDSET()
函数,例如

WITH t(js) AS
(
 SELECT '[ { "state" : "CA", "tax_amount" : 3},
           { "state" : "AZ", "tax_amount" : 4}]'::JSONB
)
 SELECT SUM(tax_amount) AS total_tax_amount
   FROM t
  CROSS JOIN JSONB_POPULATE_RECORDSET(NULL::record,js )
             AS tab(state VARCHAR(10), tax_amount INT)

total_tax_amount
----------------
 7
修复JSON对象的语法后,使用双引号替换单引号,并使用单引号包装整个对象


我将使用标量子查询:

select t.*, 
       (select sum((item ->> 'tax_amount')::int) 
        from  jsonb_array_elements(t.the_column) as x(item)) as total_tax
from the_table t

您想要的输出到底是什么?@a_horse_和\u no_名称在本例中,输出将是7多行呢?您要每行的税额之和吗?还是所有行?@a_horse_,每行有_no_名称字符串是单个条目,因此它将是每个条目的总税额。每个条目都有一个字符串,其中包含json格式的多个子条目。这不是您想要的结果(7)吗@ilikemath3.14您可以显式地表达您想要的其他内容。作为输出吗?这似乎不起作用-可能这是另一种sql风格?我在申请博士后学位。jsonb_array_elements函数无法识别。@ilikemath3.14:
jsonb_array_elements()
肯定有效。我只是忘了将键名放在单引号中。我收到了以下错误消息:错误:函数jsonb_数组_元素(json)不存在。编辑:找到了-需要转换为jsonb。你能解释x(项)语法背后的直觉吗?这里发生了什么?谢谢你的帮助@ilikemath3.14:这是一个
select t.*, 
       (select sum((item ->> 'tax_amount')::int) 
        from  jsonb_array_elements(t.the_column) as x(item)) as total_tax
from the_table t