如何在PostgreSQL中获取数组的唯一值去除重复元素
解决方案
你可以通过数组展开后去重再聚合的方式实现数组元素去重,以下是兼容所有PostgreSQL版本的写法:
SELECT f."_id", ARRAY(SELECT DISTINCT unnest(ARRAY[public.getdomain(f."linkUrl"), public.getdomain(f."sourceUrl")])) AS file_domains, public.getuniqdomains(s."originUrls", s."testUrls") AS source_domains FROM files f LEFT JOIN sources s ON s."_id" = f."sourceId"
可选更简洁写法(PostgreSQL 14及以上版本支持)
直接使用内置的array_distinct函数:
SELECT f."_id", array_distinct(ARRAY[public.getdomain(f."linkUrl"), public.getdomain(f."sourceUrl")]) AS file_domains, public.getuniqdomains(s."originUrls", s."testUrls") AS source_domains FROM files f LEFT JOIN sources s ON s."_id" = f."sourceId"
需保留元素原有顺序的写法
如果需要保留数组元素的原始出现顺序,不打乱排序逻辑,可以使用以下写法:
SELECT f."_id", ARRAY( SELECT elem FROM unnest(ARRAY[public.getdomain(f."linkUrl"), public.getdomain(f."sourceUrl")]) WITH ORDINALITY t(elem, ord) GROUP BY elem ORDER BY min(ord) ) AS file_domains, public.getuniqdomains(s."originUrls", s."testUrls") AS source_domains FROM files f LEFT JOIN sources s ON s."_id" = f."sourceId"
内容的提问来源于stack exchange,提问作者mevers303
相关产品推荐
相关产品推荐

