You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:39:01