PostgreSQL JSONB将哈希内的数组值分组
我们有一个PostgreSQLPostgreSQL JSONB将哈希内的数组值分组,postgresql,jsonb,Postgresql,Jsonb,我们有一个PostgreSQLjsonb列,其中包含散列,散列又包含值数组: id | hashes --------------- 1 | {"sources"=>["a","b","c"], "ids"=>[1,2,3]} 2 | {"sources"=>["b","c","d","e","e"], "ids"=>[1,2,3]} 我们要做的是创建一个jsonb查询,该查询将返回 code | count --------------- "a" | 1 "b"
jsonb
列,其中包含散列,散列又包含值数组:
id | hashes
---------------
1 | {"sources"=>["a","b","c"], "ids"=>[1,2,3]}
2 | {"sources"=>["b","c","d","e","e"], "ids"=>[1,2,3]}
我们要做的是创建一个jsonb
查询,该查询将返回
code | count
---------------
"a" | 1
"b" | 2
"c" | 2
"d" | 1
"e" | 2
我们一直在尝试一些类似于
SELECT jsonb_to_recordset(hashes->>'sources')
但这不起作用-非常感谢您提供的任何帮助…设置(应该是问题的一部分,请注意正确的json语法):
使用以下功能:
设置(应该是问题的一部分,注意正确的json语法):
使用以下功能:
我们最终以这种方式实现了这一目标:
SELECT jsonb_array_elements_text(hashes->'sources') as s1,
count(jsonb_array_elements_text(hashes->'sources'))
FROM a_table
GROUP BY s1;
但克林的解决方案更为完整,克林和帕特里克都比我们更快地到达了那里(谢谢你们两位)——所以他们都得到了分数 我们最终以这种方式实现了这一目标:
SELECT jsonb_array_elements_text(hashes->'sources') as s1,
count(jsonb_array_elements_text(hashes->'sources'))
FROM a_table
GROUP BY s1;
但克林的解决方案更为完整,克林和帕特里克都比我们更快地到达了那里(谢谢你们两位)——所以他们都得到了分数
SELECT h, count(*)
FROM (
SELECT jsonb_array_elements_text(hashes->'sources') AS h FROM mytable
) sub
GROUP BY h
ORDER BY h;
SELECT jsonb_array_elements_text(hashes->'sources') as s1,
count(jsonb_array_elements_text(hashes->'sources'))
FROM a_table
GROUP BY s1;