如何在红移中使用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中没有提供答案中提到的功能。
答案 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不断添加所有新功能。
答案 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;