MySQL 的 GROUP_CONCAT()
内置聚合函数,将 GROUP BY
产生的同一个分组中的值连接起来,返回一个字符串结果。
语法
格式
简单的格式如下:
GROUP_CONCAT(expr)
其中 expr
细化后,具体的如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
参数
可用的参数具体如下:
DISTINCT
:用于针对指定列值的去重;ORDER BY
:针对分组合并的值,可以先进行排序后再联结;SEPARATOR
:可以指定联结的分隔符,默认为英文逗号符。
长度限制
联结的值最大长度受到系统的限制,默认值是 1024,可以通过变量 group_concat_max_len 设置进行调整,具体如下:
SET [GLOBAL | SESSION] group_concat_max_len = val;
如上表达式中,val 是无符号整数。
返回值是非二进制或二进制字符串,具体取决于参数是非二进制还是二进制字符串。结果类型为 TEXT 或 BLOB,除非 group_concat_max_len 小于或等于 512,在这种情况下,结果类型为 VARCHAR 或 VARBINARY。
实例
将每个学生的各科练习分数拼接在一起查询:
mysql> SELECT student_name,
GROUP_CONCAT(test_score)
FROM student
GROUP BY student_name;
如果要去重相同值排序并自定义联结符时,可以如下:
mysql> SELECT student_name,
GROUP_CONCAT(DISTINCT test_score
ORDER BY test_score DESC SEPARATOR ' ')
FROM student
GROUP BY student_name;