如何在redshift中GROUP BY和CONCATENATE字段

时间:2014-07-01 03:36:47

标签: sql postgresql group-by string-concatenation amazon-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

There some solutions PostgreSQL,但Redshift righnow中没有提供答案中提到的功能。

2 个答案:

答案 0 :(得分:23)

嗯,我有点迟了但announcement about this feature发生在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不断添加所有新功能。

Here is the documentation about the function

答案 1 :(得分:0)

看起来没有直接的解决方法。以下是我要解决的问题,这个解决方案只有当你知道你逐个字段重复多少次才有效,例如在上面的情况下它是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;