1

在 mysql 中,当我使用 group by 运行查询时,我需要在列中并排获取枚举字段,如下所示。

有如下表

mysql> describe tabex;
+---------+----------------------------+------+-----+---------+----------------+
| Field   | Type                       | Null | Key | Default | Extra          |
+---------+----------------------------+------+-----+---------+----------------+
| id      | int(11)                    | NO   | PRI | NULL    | auto_increment |
| personid| int(11)                    | YES  |     | NULL    |                |
| color   | enum('red','blue','white') | YES  |     | NULL    |                |
+---------+----------------------------+------+-----+---------+----------------+

有不同的衬衫,personid 列描述了那个人的 id,color 表示他的衬衫的颜色。

表中数据如下

mysql> select * from tabex;
+----+----------+-------+
| id | personid | color |
+----+----------+-------+
|  1 |        1 | red   |
|  2 |        1 | white |
|  3 |        2 | blue  |
|  4 |        2 | red   |
+----+----------+-------+
4 rows in set (0.00 sec)

当我运行查询时,我得到这样的结果

mysql> select personid , color from tabex group by personid;
+----------+-------+
| personid | color |
+----------+-------+
|        1 | red   |
|        2 | blue  |
+----------+-------+

但我想要下面的结果

+----------+-------------+               
|personid  |   color     |               
+----------+-------------+               
|1         |   red,white |               
|2         |   blue,red  |               
|          |             |               
+----------+-------------+  

如何通过使用 group by 和聚合(如果有枚举)来获得上述结果。

就是在这里,我想获得枚举字段的结果,就像我们将通过使用 count 或 sum 函数和 group by 获得的那样。

4

1 回答 1

3

GROUP_CONCAT()聚合函数可以满足您的要求:

SELECT personid, GROUP_CONCAT(color) colors
FROM tabex
GROUP BY personid

这适用于任何类型的字段,而不仅仅是 ENUM。

于 2012-11-15T07:58:42.873 回答