給定一個文本元素數組我想計算出現次數並將它們返回爲帶文本鍵和整數值的子對象。 (PostgreSQL的9.4)PostgreSQL將事件計入json鍵/值
案例1 - 無參考設置
SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G','4G']
應轉變到
SELECT '{"2G": 2, "3G": 5, "4G": 1}'::jsonb
案例2 - 利用參考設置
給定了一組可能的條目ARRAY['2G','3G','4G']
,返回的json也應該包含零計數的元素。
SELECT ARRAY['3G','2G','2G','3G','3G','3G','3G']
要轉變到
SELECT '{"2G": 2, "3G": 5, "4G": 0}'::jsonb
我得到了相當接近的情況下,1和2使用
-- case 1
SELECT json_object(array_agg(r.a)::text[],array_agg(r.num)::text[])
FROM (
SELECT a, count(a) as num
FROM unnest(ARRAY['3G','2G','2G','3G','3G','3G','3G','4G']) a
GROUP BY a ORDER BY a
) r;
--case 2
SELECT json_object(array_agg(r.ref)::text[],array_agg(r.num)::text[])
FROM (
SELECT ref, count(a) as num
FROM unnest(ARRAY['2G','3G','4G']) ref
LEFT JOIN unnest(ARRAY['3G','2G','2G','3G','3G','3G','3G']) a ON (ref = a)
GROUP BY ref ORDER BY ref
) r;
但是,結果返回文本值,例如:
SELECT '{"2G" : "2", "3G" : "5", "4G" : "0"}'::json -- case 2
感謝您的幫助和反饋!
你沒有在'ARRAY [ '3G' 包括'4G' , '2G', '2G', '3G', '3G', '3G', '3G']'。 – mic4ael
有意展示參考案例! – homat