MySQL GROUP_CONCAT()函数

一、MySQL GROUP_CONCAT()函数 语法

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

以下是 GROUP_CONCAT() 函数的语法:

GROUP_CONCAT(  
    DISTINCT expression  
    ORDER BY expression  
    SEPARATOR sep  
);  

或者

mysql> SELECT c1, c2, ....., cN  
GROUP_CONCAT (   
   [DISTINCT] c_name1   
   [ORDER BY]    
   [SEPARATOR] )   
FROM table_name GROUP BY c_name2;  

参数说明

  • c1, c2,….,cN 是表格列。
  • c_name1 是表列,其值将被连接到每个组的单个字符串中。
  • c_name2 是从中执行分组的表列。

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

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

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

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

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

二、MySQL GROUP_CONCAT()函数 示例

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

1. 使用简单查询

mysql> SELECT emp_id, emp_fname, emp_lname, dept_id,   
GROUP_CONCAT(designation) as "designation" FROM employee group by emp_id;  

该语句将给出以下输出:

2. 使用 DISTINCT 子句

mysql> SELECT emp_fname, dept_id,   
GROUP_CONCAT(DISTINCT designation) as "designation" FROM employee group by emp_id;  

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

3. 使用分隔子句

mysql>SELECT emp_fname,   
GROUP_CONCAT(DISTINCT designation SEPARATOR '; ') as "designation" FROM employee group by emp_id;   

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

上面的语句将给出以下输出:

三、GROUP_CONCAT() 和 CONCAT_WS()

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

mysql>SELECT GROUP_CONCAT(CONCAT_WS(', ', emp_lname, emp_fname) SEPARATOR ';') as employeename FROM employee; 

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

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

热门文章

优秀文章