另一列

时间:2017-10-04 01:23:00

标签: sql postgresql aggregate-functions

是否有某种"聚合" 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;

2 个答案:

答案 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_aggarray_to_string

SELECT player, string_agg(score::text, ',') AS scores FROM games GROUP BY player;

STRING_AGG()

Live Demo