RedshiftのフィールドをGROUPBYおよび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が追加し続けるすべての新機能を備えた多くのプロダクションスクリプトがアップグレードの準備ができています。
これを解決する簡単な方法はないようです。これが私がそれを解決するためにしたことです。この解決策は、フィールドごとのグループが何回繰り返されるかを知っている場合にのみ機能します。たとえば、上記の場合は2で、company_idが2回繰り返されます。私の場合、私はこの数を知っているので、このソリューションは私にとってはうまくいきますが、あまりエレガントではありません
カウントによるグループ化が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;