如何从array类型列提取唯一值,生成单列或合并数组结果?
数组去重的两种实现方案
原数据表
假设我们有如下表结构及数据:
CREATE TABLE test_arr (arrs INT[]); INSERT INTO test_arr VALUES ('{10000,10000,10000,10000}'), ('{100,200,300}'), ('{400,500,600}'), ('{100,200,600}');
结果一:将所有唯一值展开为单行记录
通过unnest拆分数组为单行值,结合DISTINCT去重后排序:
SELECT DISTINCT unnest(arrs) AS uniques FROM test_arr ORDER BY uniques;
执行后会得到每个唯一值单独一行的结果集。
结果二:将所有唯一值合并为单个数组
可以通过子查询先获取去重后的单个值,再用array_agg聚合为数组:
SELECT array_agg(uniques ORDER BY uniques) AS arrUniques FROM ( SELECT DISTINCT unnest(arrs) AS uniques FROM test_arr ) AS sub_query;
或者直接在聚合函数中处理:
SELECT array_agg(DISTINCT unnest(arrs) ORDER BY unnest(arrs)) AS arrUniques FROM test_arr;
两种写法都会得到包含所有唯一值的单个数组结果。
内容的提问来源于stack exchange,提问作者user23025019
相关产品推荐
相关产品推荐

