簡體   English   中英

如何根據關鍵模式從 Postgress 中的 json 中提取值?

[英]How to extract value from json in Postgress based on a key pattern?

在 Postgres v9.6.15 中,我需要使用某些鍵的文本模式來獲取所有值的總和。

例如,表“TABLE1”有 4 行:

       |group  |col1
======================================
Row #1:|group1 |{ "json_key1.id1" : 1 }
Row #2:|group1 |{ "json_key1.id2" : 1 }
Row #3:|group1 |{ "json_key2.idX" : 1 }
Row #4:|group1 |{ "not_me" : 2 }

我想使用鍵的第一部分( "json_key1" 和 "json_key2" )的模式獲取 int 值,並使用 CASE 塊將它們全部求和,如下所示:

SELECT table1.group as group,
  COALESCE(sum(
    CASE
    WHEN table1.col1 = 'col1_val1' THEN (table1.json_col->>'json_key1.%')::bigint
    WHEN table1.col1 = 'col1_val2' THEN (table1.json_col->>'json_key2.%')::bigint
    ELSE 0::bigint
  END), 0)::bigint AS my_result
FROM      table1 as table1
GROUP BY  table1.group;

我需要“my_result”看起來像:

       |group  |my_result
======================================
Row #1:|group1 |3

有沒有辦法使用正則表達式或類似的東西來收集值。 不確定我是否正在檢查正確的文檔( https://www.postgresql.org/docs/9.6/functions-json.html ),但我沒有找到任何可以幫助我實現上述目標的東西,或者如果確實如此可能的..

在橫向連接中使用jsonb_each_text()從 json 對象中獲取對(key, value)

select 
    group_col as "group",
    coalesce(sum(case when key like 'json_k%' then value::numeric end), 0) as my_result
from table1
cross join jsonb_each_text(col1)
group by group_col

數據庫<>小提琴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM