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 选项按降序对值进行排序。
分隔符:默认情况下,此子句使用逗号(,)运算符作为分隔符。如果要更改默认分隔符,可以指定文字值。
注意:此函数始终返回二进制或非二进制字符串值的结果,具体取决于指定的参数。默认情况下,它返回等于 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 运算符接受值列表,而不是字符串。
相关用法
- MySQL GREATEST()用法及代码示例
- MySQL GET_FORMAT()用法及代码示例
- MySQL Group_CONCAT()用法及代码示例
- MySQL ROUND()用法及代码示例
- MySQL REPEAT()用法及代码示例
- MySQL POWER()用法及代码示例
- MySQL LEAD() and LAG()用法及代码示例
- MySQL IS_IPV4()用法及代码示例
- MySQL WEEK()用法及代码示例
- MySQL CHARACTER_LENGTH()用法及代码示例
- MySQL CURTIME()用法及代码示例
- MySQL weekofyear()用法及代码示例
- MySQL CURRENT_TIME()用法及代码示例
- MySQL Convert()用法及代码示例
- MySQL FROM_BASE64()用法及代码示例
- MySQL OCT()用法及代码示例
- MySQL PI()用法及代码示例
- MySQL CONCAT()用法及代码示例
- MySQL period_add()用法及代码示例
- MySQL STDDEV()用法及代码示例
注:本文由纯净天空筛选整理自 MySQL GROUP_CONCAT() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。