Агрегировать строковые значения в список

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

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

CUST_ID     ORDER
1           Cake
1           Bread
2           Cake
3           Cake
3           Bread
3           Croissant
4           Croissant

Но хотел бы вывести его следующим образом:

CUST_ID     ORDERS
1           Cake
1           Bread, Cake
3           Cake, Bread, Croissant
4           Croissant

Я пробовал подзапросы (которые я не могу заставить работать), но, тем не менее, это кажется жестоким:

SELECT CUST_ID, SELECT (ORDER FROM table GROUP BY CUST_ID)
FROM table
GROUP BY CUSTT_ID

Любые идеи?


person NickP    schedule 12.05.2017    source источник
comment
где CUST_ID = 2 в желаемом результате?   -  person Oto Shavadze    schedule 12.05.2017
comment
@OtoShavadze Я думаю, что это опечатка.   -  person Tim Biegeleisen    schedule 12.05.2017
comment
@TimBiegeleisen - да, кажется.   -  person Oto Shavadze    schedule 12.05.2017
comment
Используете ли вы Postgres или Amazon Redshift. Хотя Redshift основан на (очень старой версии) Postgres, это не одно и то же.   -  person a_horse_with_no_name    schedule 12.05.2017
comment
Используя Redshift, я всегда считал, что это один и тот же вариант с небольшими вариациями. Это интересно!   -  person NickP    schedule 12.05.2017


Ответы (1)


Основываясь на этом SO-вопросе, у Redshift теперь есть Аналитическая функция LISTAGG(), которую вы можете использовать.

SELECT CUST_ID,
       LISTAGG("ORDER", ', ')
WITHIN GROUP (ORDER BY "ORDER")
OVER (PARTITION BY CUST_ID) AS CUST_ID
FROM Table
ORDER BY CUST_ID
person Tim Biegeleisen    schedule 12.05.2017