繁体   English   中英

如何在 redshift 中对字段进行 GROUP BY 和 CONCATENATE

[英]How to GROUP BY and CONCATENATE fields in redshift

如何在 Redshift 中 GROUP BY 和 CONCATENATE 字段,例如如果我有表

ID   COMPANY_ID   EMPLOYEE
1    1            Anna
2    1            Bill
3    2            Carol
4    2            Dave

我怎样才能得到这样的结果

COMPANY_ID   EMPLOYEE
1            Anna, Bill
2            Carol, Dave

PostgreSQL 有一些解决方案,但这些答案中提到的功能目前在 Redshift 中均不可用。

好吧,我有点晚了,但是关于这个功能的公告发生在 2015 年 8 月 3 日。Redshift 引入了 LISTAGG 窗口功能,现在可以这样做。 这是您问题的快速解决方案-可能有用也可能没有用,但将其放在这里以便人们知道!

SELECT COMPANY_ID,
       LISTAGG(EMPLOYEE,', ')
WITHIN GROUP (ORDER BY EMPLOYEE)
OVER (PARTITION BY COMPANY_ID) AS EMPLOYEE
FROM YOUR_TABLE
ORDER BY COMPANY_ID

我很高兴看到这个功能,并且我们的许多生产脚本都已升级为 Redshift 不断添加的所有新功能。

这是有关该功能的文档

== Redshift 现在支持这一点,正如 rohitkulky 所回答的那样,不要使用这个 hack ==

看起来没有直接的方法来解决这个问题。 这是我为解决它所做的,此解决方案仅在您知道按字段分组重复了多少次时才有效,例如在上述情况下为 2,因为 company_id 被重复两次。 就我而言,我知道这个计数,所以这个解决方案对我有用,虽然不是很优雅

如果按计数分组为 2

select e1.company_id, e1.name || e2.name
from employee e1, employee e2
where e1.company_id = e2.company_id and e1.id < e2.id;

如果按计数分组为 3

select e1.company_id, e1.name || e2.name || e3.name
from employee e1, employee e2, employee e3
where e1.company_id = e2.company_id and e1.company_id = e2.company_id and e1.id < e2.id and e2.id < e3.id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM