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 と集計 (enum の場合) を使用して、上記の結果を取得するにはどうすればよいですか。

これは、count または sum 関数と group by を使用して得られるように、enum フィールドの結果を取得したいということです。

4

1 に答える 1

3

GROUP_CONCAT()集計関数は、あなたが望むことを行います:

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

これは、ENUM だけでなく、あらゆる種類のフィールドで機能します。

于 2012-11-15T07:58:42.873 に答える