sql - 合并和删除 jsonb 中的重复项 - PostgreSQL
问题描述
我已经设法使用 jsonb 数组组合||
,但我无法'N/A'
从 jsonb 数组中删除重复项和。
当前代码:
SELECT
jsonb_path_query_array(column1, '$.key') ||
jsonb_path_query_array(column2, '$.key') ||
jsonb_path_query_array(column3, '$.key')
FROM
table;
当前输出:(jsonb)
['N/A', 'N/A', 'N/A']
['N/A', 'AGENT', 'N/A']
['N/A', 'AGENT', 'AGENT']
['SYSTEM', 'N/A', 'N/A']
期望的输出
NULL
AGENT
AGENT
SYSTEM
解决方案
您可以使用cte
with array_to_json
:
with vals(a) as (
select jsonb_path_query_array(column1, '$.key') || jsonb_path_query_array(column2, '$.key') || jsonb_path_query_array(column3, '$.key') from data
),
r_na(a) as (
select (select array_to_json(array_agg(distinct v.value))
from jsonb_array_elements(v1.a) v where v.value::text <> '"N/A"')
from vals v1
)
select case when a::text = 'null' then null else a -> 0 end r from r_na;
输出:
null
AGENT
AGENT
SYSTEM