首页 > 解决方案 > 合并和删除 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

标签: sqlpostgresql

解决方案


您可以使用ctewith 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

推荐阅读