3 回答

TA貢獻1794條經驗 獲得超7個贊
使用聚合函數string_agg()(Postgres 9.0或更高版本)更簡單:
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
在這種情況下,1in GROUP BY 1是位置參考和快捷方式GROUP BY movie。
string_agg()期望數據類型text作為輸入。其他類型需要顯式轉換(actor::text) - 除非到隱式轉換text的定義-這是所有其他字符類型(的情況下varchar,character,"char"),和一些其他類型。
正如isapir所說,您可以ORDER BY在聚合調用中添加一個子句以獲取排序列表-如果需要的話。喜歡:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;

TA貢獻1860條經驗 獲得超9個贊
您可以使用array_agg函數:
SELECT "Movie",
array_to_string(array_agg(distinct "Actor"),',') AS Actor
FROM Table1
GROUP BY "Movie";
結果:
| MOVIE | ACTOR |
-----------------
|? ? ?A | 1,2,3 |
|? ? ?B |? ? ?4 |
看到這個SQLFiddle
添加回答
舉報