将字符串值聚合到列表中
Aggregate string values to a list
我正在尝试使用一些非常简单的逻辑将非透视列转换为本质上相当于分组列表的列。但是,很难有效地做到这一点。
基本上,我有一个如下所示的数据集:
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
有什么想法吗?
基于this SO question, Redshift now has a 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
我正在尝试使用一些非常简单的逻辑将非透视列转换为本质上相当于分组列表的列。但是,很难有效地做到这一点。
基本上,我有一个如下所示的数据集:
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
有什么想法吗?
基于this SO question, Redshift now has a 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