MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

MySQL GROUP_CONCAT() 聚合内置函数详解

MySQL 内置函数及自定义函数详解 MySQL 内置函数及自定义函数详解


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;