按另一个属性执行分组时选择一个属性

Selecting an atrribute when performing grouping by another attribute

我有以下名为 Pokemon 的 table,其中包含一些口袋妖怪的信息。

+------------+-------+--------+--------+--+
|    name    | type  | weight | color  |  |
+------------+-------+--------+--------+--+
| bulbasaur  | grass |     10 | green  |  |
| squirtle   | water |      7 | blue   |  |
| charmander | fire  |      8 | orange |  |
| cyndaquil  | fire  |      4 | black  |  |
| staryu     | water |     12 | orange |  |
+------------+-------+--------+--------+--+

我想按颜色 table 和每个口袋妖怪的名字 select 分组 属于每个颜色组。

即我要4组:

  1. 绿色
  2. 蓝色
  3. 橙色
  4. 黑色

以及每组中每只神奇宝贝的名字:

  1. 灯泡龙
  2. 杰尼龟
  3. 小火龙,staryu
  4. 辛达奎尔

我试过在 SQL 中使用 GROUP BY 子句,如下所示:

SELECT name
FROM POKEMON
GROUP BY color

但这行不通,因为 GROUP BY 子句坚持认为 SELECT 中的列属性必须包含在 GROUP BY 中或对其执行聚合函数。

因为这是我在 SQL 编码的第三天,我还没有找到解决这个问题的方法。

提前感谢您抽出宝贵时间提供帮助。

你还需要select颜色,比如:

SELECT name, color
FROM POKEMON
GROUP BY name, color

您需要字符串聚合。在 Postgres 中,您可以这样表述:

select color, string_agg(name, ',') as names
from pokemon
group by color