📜  mysql 中的 group_concat(1)

📅  最后修改于: 2023-12-03 15:17:47.036000             🧑  作者: Mango

MySQL 中的 GROUP_CONCAT 函数介绍

简介

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 函数的参数说明:

  1. DISTINCT:可选参数,用来指定去重,默认是不去重的。

  2. expr:要合并的表达式,它可以是任何数据类型,包括数值、字符串、日期等。

  3. ORDER BY:可选参数,用来指定排序方式,默认是乱序的。

  4. ASCDESC:可选参数,用来指定升序或降序,默认是升序。

  5. SEPARATOR:可选参数,用来指定分隔符,默认是逗号(,)。

使用示例

下面是 GROUP_CONCAT 函数的使用示例:

示例1:基本用法

假设有如下表:

+----+-------+
| 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;
示例2:添加分隔符

假设我们希望在示例1的基础上,在合并后的结果中添加分号作为分隔符。这个要求可以用下面的 SQL 语句实现:

SELECT id, GROUP_CONCAT(value SEPARATOR ';') as value
FROM my_table
GROUP BY id;
示例3:按照指定顺序排序

假设我们希望在示例1的基础上,按照 value 列的升序对结果进行排序。这个要求可以用下面的 SQL 语句实现:

SELECT id, GROUP_CONCAT(value ORDER BY value ASC) as value
FROM my_table
GROUP BY id;
示例4:将字符串去重后再合并

假设我们希望在示例1的基础上,将合并结果中的重复值去除。这个要求可以用下面的 SQL 语句实现:

SELECT id, GROUP_CONCAT(DISTINCT value) as value
FROM my_table
GROUP BY id;
总结

GROUP_CONCAT 函数可以用来将多行数据的某一列合并到一行中,并且可以用自定义的分隔符进行分隔。如果需要去重或排序,也都能够支持。这个函数在实际业务过程中比较常用,可以有效地减少查询结果集的数据量。