2016-06-13 39 views
0

我們有一個包含哈希又包含值的數組一個PostgreSQL jsonb柱:哈希PostgreSQL內部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') 
東西線0

但是這不工作 - 與此非常感激任何幫助......

回答

1

的設置(應該是問題的一部分,注意正確的JSON語法):

create table a_table (id int, hashes jsonb); 
insert into a_table values 
(1, '{"sources":["a","b","c"], "ids":[1,2,3]}'), 
(2, '{"sources":["b","c","d","e","e"], "ids":[1,2,3]}'); 

使用功能jsonb_array_elements()

select code, count(code) 
from 
    a_table, 
    jsonb_array_elements(hashes->'sources') sources(code) 
group by 1 
order by 1; 

code | count 
------+------- 
"a" |  1 
"b" |  2 
"c" |  2 
"d" |  1 
"e" |  2 
(5 rows)  
1
SELECT h, count(*) 
FROM (
    SELECT jsonb_array_elements_text(hashes->'sources') AS h FROM mytable 
) sub 
GROUP BY h 
ORDER BY h; 
0

我們終於得到了這方面的工作是這樣的:

SELECT jsonb_array_elements_text(hashes->'sources') as s1, 
count(jsonb_array_elements_text(hashes->'sources')) 
FROM a_table 
GROUP BY s1; 

但是Klin的解決方案更加完整,Klin和Patrick都比我們更快(謝謝你們) - 所以積分會轉到他們身上。