📜  MySQL GROUP_CONCAT()函数

📅  最后修改于: 2020-11-19 00:37:00             🧑  作者: Mango

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()函数的选项:

不同:此子句在进行串联之前删除组中的重复值。

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

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

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

GROUP_CONCAT()示例

让我们创建一个员工表,以了解该函数如何使用不同的查询在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; 

在这里,分隔子句将默认的返回字符串逗号(,)更改为分号(;)和一个空格字符。

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

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()函数与分号(;)分隔子句结合使用,以在单个行中列出所有雇员。最后,执行该语句。成功执行后,我们将获得以下输出:

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