Это сложно.Одно простое предложение - использовать select distinct
:
select listagg(col, ',') within group (order by col)
from (select distinct col from t) x;
Однако это затрудняет вычисление других агрегаций (или генерирование результатов, превышающих listagg()
).Другой способ - использовать оконные функции в сочетании с listagg()
:
select listagg(case when seqnum = 1 then col end, ',') within group (order by col)
from (select t.*,
row_number() over (partition by col order by col) as seqnum
from t
) t