是否有某种"聚合" SQL中的函数只是将值转换为列表?示例可能是表格的表格:
| game_id | player | score |
|---------|--------|-------|
| 1 | fred | 2 |
| 1 | tom | 1 |
| 2 | fred | 3 |
| 2 | tom | 4 |
我想要的是一张如下表:
| player | scores |
|--------|--------|
| fred | 2, 3 |
| tom | 1, 4 |
该命令可能类似于:
SELECT player, listify(score) FROM games GROUP BY player;
答案 0 :(得分:4)
感谢蒂姆和戈登。我正在寻找的Postgres功能是array_agg
。在这种情况下,完整查询如下所示:
SELECT player, array_to_string(array_agg(score), ',') AS scores FROM games GROUP BY player;
array_agg
将所有分数放入数组中,您必须将它们转换为字符串才能在SELECT语句中返回它们。
答案 1 :(得分:0)
您可以使用string_agg
,这样就不必调用两个不同的功能array_agg
和array_to_string
。
SELECT player, string_agg(score::text, ',') AS scores FROM games GROUP BY player;