MySQL GROUP_CONCAT()函数
MySQL中的GROUP_CONCAT()函数是一种聚合函数。此函数用于使用各种子句将多行中的字符串连接为单个字符串。如果组中至少包含一个非空值,则它将始终返回一个字符串值。否则,您将获得一个空值。
以下是GROUP_CONCAT()函数的语法:
GROUP_CONCAT(
DISTINCT expression
ORDER BY expression
SEPARATOR sep
);
OR,
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: 默认情况下,此子句使用逗号(,)运算符作为分隔符。如果要更改默认的分隔符,则可以指定文字值。
注意: 此函数始终以二进制或非二进制字符串值返回结果,该结果取决于指定的参数。默认情况下,它返回等于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;
在这里,分隔子句将默认的返回字符串comma(,)更改为分号(;)和空格字符。
上面的语句将给出以下输出:
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运算符接受值列表,而不是字符串。