【问题标题】:Aggregate string values to a list将字符串值聚合到列表中
【发布时间】:2017-10-11 10:20:46
【问题描述】:

我正在尝试使用一些非常简单的逻辑将未透视的列转换为基本上相当于分组列表的内容。但是,很难有效地做到这一点。

基本上,我有一个如下所示的数据集:

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

有什么想法吗?

【问题讨论】:

  • CUST_ID = 2 的期望结果在哪里?
  • @OtoShavadze 我认为这是一个错字。
  • @TimBiegeleisen - 是的,看起来。
  • 您使用的是 Postgres 还是 Amazon Redshift。尽管 Redshift 基于(一个非常旧版本的)Postgres,但它们并不相同
  • 使用 Redshift,我一直认为它们是相同的变体,只有很小的变化。这很有趣!

标签: sql amazon-redshift string-aggregation


【解决方案1】:

基于this SO question,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2017-08-29
    • 2020-07-03
    • 2013-10-28
    • 2019-01-27
    • 2020-11-27
    • 2020-12-17
    相关资源
    最近更新 更多