В Presto, как получить массив с уникальными элементами

avatar
Mark Ginsburg
8 августа 2021 в 21:56
644
2
0

У меня есть вопрос

SELECT id, id_arr from RESULTS

и возвращает такой результат:


    123             [742] 
    123             [332,180]
    123             [742,180,039] 
    123             [244,302, 742] 
    123             [412] 

Как в Presto построить запрос, который даст мне идентификатор и комбинированный массив только с его уникальными элементами? Я знаю о функции ARRAY_UNION, но у меня проблемы с ее работой.

Источник

Ответы (2)

avatar
ggordon
8 августа 2021 в 22:55
1

Вы также можете попробовать агрегировать массив и найти отдельные элементы, используя следующее:

SELECT
    id, 
    set_union(id_arr) as combined_id_arr
FROM
    RESULTS
GROUP BY 
    id

ИЛИ более подробно

SELECT
    id, 
    array_distinct(flatten(array_agg(id_arr))) as combined_id_arr
FROM
    RESULTS
GROUP BY 
    id
avatar
Isis Santos Costa
8 августа 2021 в 23:18
0

сочетается с UNNEST + ARRAY_AGG:

select id, array_agg(elements) as unique_elements
from ( select distinct id, elements from RESULTS
       cross join unnest(id_arr) as t(elements)
       order by elements ) a
group by id