MySQL GROUP_CONCAT() 函数

2025年3月17日 | 阅读 3 分钟

MySQL 中的 GROUP_CONCAT() 函数是一种聚合函数。该函数用于使用各种子句将多行中的字符串连接成一个字符串。如果组至少包含一个非空值,则始终返回字符串值。否则,将得到 null 值。

以下是 GROUP_CONCAT() 函数的语法

或,

在这个语法中,

  • c1, c2, ..., cN 是表中的列。
  • c_name1 是将进行分组的表列,其值将被连接成一个字符串。
  • c_name2 是从中执行分组的表列。

GROUP_CONCAT() 函数的选项解释如下:

Distinct:此子句在进行连接之前删除组中的重复值。

Order By:它允许我们将组数据按升序或降序排序,然后进行连接。默认情况下,它按升序执行排序。但是,您可以使用 DESC 选项显式地按降序对值进行排序。

Separator:默认情况下,此子句使用逗号 (,) 作为分隔符。如果要更改默认分隔符,可以指定字面值。

注意:此函数始终以二进制或非二进制字符串值返回结果,具体取决于指定的参数。默认情况下,它返回的最大字符串长度为 1024。如果想增加此长度,可以使用 group_concat_max_len 系统变量。

GROUP_CONCAT() 示例

让我们创建一个 employee 表来理解该函数在 MySQL 中是如何工作的,并使用不同的查询。

MySQL GROUP_CONCAT() Function

1. 使用简单查询

此语句将产生以下输出

MySQL GROUP_CONCAT() Function

2. 使用 DISTINCT 子句

成功执行上述语句后,我们将得到以下输出:

MySQL GROUP_CONCAT() Function

3. 使用 Separator 子句

在此,separator 子句将默认返回的字符串逗号 (,) 更改为分号 (;) 和空格字符。

以上语句将产生以下输出。

MySQL GROUP_CONCAT() Function

GROUP_CONCAT() 和 CONCAT_WS()

现在,您已经了解了 GROUP_CONCAT() 函数的工作原理。有时,我们可以将此函数与 CONCAT_WS() 函数一起使用,以获得更有用的结果。以下语句更清楚地解释了这一点:

在此语句中,CONCAT_WS() 函数首先连接每个员工的名字和姓氏,从而得到员工的全名。接下来,我们使用带分号 (;) 分隔符子句的 GROUP_CONCAT() 函数将所有员工列表合并到一行中。最后,执行该语句。成功执行后,我们将得到以下输出:

MySQL GROUP_CONCAT() Function

此函数以单行形式返回结果,而不是值的列表。因此,我们不能将 GROUP_CONCAT() 函数与 IN 运算符一起使用。如果将 IN 运算符与此函数一起使用,则查询将不起作用,因为 IN 运算符接受值的列表,而不是字符串。


下一个主题MySQL first function