我有一个包含json数组的表。以下是该字段内容的样本:
SELECT json_array FROM table LIMIT 5;
结果:
[{{“ key1”:“ value1”},{“ key1”:“ value2”},...,{“ key2”:“ value3”}]
[]
[]
[] {“ key1”:“ value1”}
[]
如何获取所有值并计算找到的每个值有多少?
我正在使用PostgreSQL 9.5.14,并且在这里Querying a JSON array of objects in Postgres尝试了解决方案 以及另一个慷慨的stackoverflow用户在我的最后一个问题中向我提出的建议:How can I parse JSON arrays in postgresql?
我尝试过:
SELECT
value -> 'key1'
FROM
table,
json_array_elements(json_array);
可惜由于收到错误而对我不起作用:
无法在标量上调用json_array_elements
This error happens when using a query that returns more than one row or more than one column as a scalar subquery.
我尝试过的另一个解决方案是:
SELECT json_array as json, (json_array->0),
coalesce(
case
when (json_array->0) IS NULL then null
else (json_array->0->>'key1')
end,
'No value') AS "Value"
FROM table;
仅返回“值”的空值
引用Querying a JSON array of objects in Postgres时,我也尝试使用此解决方案:
WITH json_test (col) AS (
values (json_arrays)
)
SELECT
y.x->'key1' "key1"
FROM json_test jt,
LATERAL (SELECT json_array_elements(jt.col) x) y;
但是我需要能够将json_arrays的所有元素放入json_test
到目前为止,我只尝试列出所有json数组中的所有值,但是我理想的查询最终结果类似于:
值|金额
---------------
value1 | 48
value2 | 112
value3 | 93
value4 | 0
再次感谢您的帮助,在此先感谢您。
答案 0 :(得分:0)
SELECT
each.value,
COUNT(*)
FROM
data,
json_array_elements(json_array) elems, -- 1
json_each_text(elems) each -- 2
GROUP BY each.value -- 3