[英]How can I aggregate Jsonb columns in postgres using another column type
說明
使用jsonb_each_text
函數從名為data
jsonb
列中提取data
。 然后,使用GROUP BY
為每個不同的field_type
獲取一行,以聚合行。 對於每種匯總,我們還需要包括會議和簡報計數,這可以通過用case語句選擇最大值來完成,以便您可以為不同的計數創建兩個單獨的列。 最重要的是,如果缺少某些信息,則應用coalesce
函數返回0
而不是NULL
在您的示例中,這將是Data Science的簡介。
在更高層次的陳述中,現在我們將結果作為具有字段的表存儲起來,我們需要構建一個jsonb
對象並將它們全部聚集到一行。 為此,我們使用了jsonb_build_object
,將包含以下內容的對傳遞給它們:字段名稱+值。 這給我們帶來了3行數據,每行數據都有一個單獨的jsonb
列。 由於我們只需要在輸出中顯示一行(匯總的json),因此我們需要在此之上應用jsonb_agg
。 這為我們帶來了您想要的結果。
碼
檢查“ 實時演示”以了解其工作原理。
select
jsonb_agg(
jsonb_build_object('field_type', field_type,
'briefings_count', briefings_count,
'meetings_count', meetings_count
)
) as agg_data
from (
select
j.k as field_type
, coalesce(max(case when t.count_type = 'briefings_count' then j.v::int end),0) as briefings_count
, coalesce(max(case when t.count_type = 'meetings_count' then j.v::int end),0) as meetings_count
from tbl t,
jsonb_each_text(data) j(k,v)
group by j.k
) t
您可以聚合這樣的列,然后將數據插入到另一個表中
select array_agg(data)
from the_table
或使用內置的json函數之一創建新的json數組。 例如jsonb_agg(expression)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.