📅  最后修改于: 2023-12-03 15:17:47.036000             🧑  作者: Mango
GROUP_CONCAT 是 MySQL 中的一种聚合函数,主要用于将一个查询中多行数据的某一列进行合并为一行数据,并且可以用自定义分隔符进行分隔。
GROUP_CONCAT 函数的语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
下面是 GROUP_CONCAT 函数的参数说明:
DISTINCT
:可选参数,用来指定去重,默认是不去重的。
expr
:要合并的表达式,它可以是任何数据类型,包括数值、字符串、日期等。
ORDER BY
:可选参数,用来指定排序方式,默认是乱序的。
ASC
或 DESC
:可选参数,用来指定升序或降序,默认是升序。
SEPARATOR
:可选参数,用来指定分隔符,默认是逗号(,)。
下面是 GROUP_CONCAT 函数的使用示例:
假设有如下表:
+----+-------+
| id | value |
+----+-------+
| 1 | A |
| 1 | B |
| 2 | C |
+----+-------+
我们希望将 value
列进行合并,得到如下结果:
+----+-------+
| id | value |
+----+-------+
| 1 | A,B |
| 2 | C |
+----+-------+
这个要求可以用下面的 SQL 语句实现:
SELECT id, GROUP_CONCAT(value) as value
FROM my_table
GROUP BY id;
假设我们希望在示例1的基础上,在合并后的结果中添加分号作为分隔符。这个要求可以用下面的 SQL 语句实现:
SELECT id, GROUP_CONCAT(value SEPARATOR ';') as value
FROM my_table
GROUP BY id;
假设我们希望在示例1的基础上,按照 value
列的升序对结果进行排序。这个要求可以用下面的 SQL 语句实现:
SELECT id, GROUP_CONCAT(value ORDER BY value ASC) as value
FROM my_table
GROUP BY id;
假设我们希望在示例1的基础上,将合并结果中的重复值去除。这个要求可以用下面的 SQL 语句实现:
SELECT id, GROUP_CONCAT(DISTINCT value) as value
FROM my_table
GROUP BY id;
GROUP_CONCAT 函数可以用来将多行数据的某一列合并到一行中,并且可以用自定义的分隔符进行分隔。如果需要去重或排序,也都能够支持。这个函数在实际业务过程中比较常用,可以有效地减少查询结果集的数据量。