GROUP_CONCAT 是 MySQL 特有的聚合函數,能將同一分組內的多行字段值拼接成一個字串,常用於報表、標籤聚合、關聯數據扁平化輸出。
GROUP_CONCAT([DISTINCT] expr [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]] [SEPARATOR str_val])
DISTINCT:去除重複值。ORDER BY:指定組內排序。SEPARATOR:自定義分隔符,預設逗號 ,。測試表 aa:
+------+------+
| id | name |
+------+------+
| 1 | 10 |
| 1 | 20 |
| 1 | 20 |
| 2 | 20 |
| 3 | 200 |
| 3 | 500 |
+------+------+
SELECT id, GROUP_CONCAT(name) FROM aa GROUP BY id;
+------+--------------------+
| id | GROUP_CONCAT(name) |
+------+--------------------+
| 1 | 10,20,20 |
| 2 | 20 |
| 3 | 200,500 |
+------+--------------------+
SELECT id, GROUP_CONCAT(DISTINCT name ORDER BY name DESC SEPARATOR ';') AS names
FROM aa GROUP BY id;
+------+-------------+
| id | names |
+------+-------------+
| 1 | 20;10 |
| 2 | 20 |
| 3 | 500;200 |
+------+-------------+
group_concat_max_len(會話級或全局)。NULL 值會被自動忽略,不出現在結果中。FIND_IN_SET() 可反向查詢:「某值是否在分組字串中」。