Получение уникальных значений из массива PostgreSQL

#postgresql

Вопрос:

Кажется, что это было бы просто сделать, но я просто не могу этого понять. У меня есть запрос, который возвращает ARRAY число строк в одном из столбцов. Я хочу, чтобы этот массив содержал только уникальные строки. Вот мой вопрос:

 SELECT
    f."_id",
    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"
 

Вот пример строки из моей таблицы возврата

_id домены_файлов домены источников
2574873 {cityofmontclair.org,cityofmontclair.org} {cityofmontclair.org}

Мне нужно file_domains содержать только уникальные значения, т. Е. «набор» вместо «списка». Подобный этому:

_id домены_файлов домены источников
2574873 {cityofmontclair.org} {cityofmontclair.org}

Ответ №1:

Используйте CASE выражение:

 CASE WHEN public.getdomain(f."linkUrl") = public.getdomain(f."sourceUrl")
     THEN ARRAY[public.getdomain(f."linkUrl")]
     ELSE ARRAY[public.getdomain(f."linkUrl"), public.getdomain(f."sourceUrl")]
END