• GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接.如果分组中括号里的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。
    对应的语法格式
# 将分组中column1这一列对应的多行的值按照column2 升序或者降序进行连接,其中分隔符为seq
# 如果用到了DISTINCT,将表示将不重复的column1按照column2升序或者降序连接
# 如果没有指定SEPARATOR的话,也就是说没有写,那么就会默认以 ','分隔
GROUP_CONCAT([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq]);

[ ORDER BY column2 ASC\DESC] :表示将会根据column2升序或者降序连接.其中column2不一定一定要求是column1,只要保证column2在这个分组中即可.如果没有写ORDER BY句段,那么连接是没有顺序的
[ SEPARATOR seq] : 表示各个column1将会以什么分隔符进行分隔,例如SEPARATOR '*’,则表示column1将会以*进行分隔。如果没有指定seq的时候,也即没有写SEPARATOR seq这个句段,那么就会默认是以,分隔的
CONCAT函数中要连接的数据含有NULL,最后返回的是NULL,但是GROUP_CONCAT不会这样,他会忽略NULL值。

    mysql> SELECT * FROM employee2;+----+-----------+------+---------+---------+| id | name      | age  | salary  | dept_id |+----+-----------+------+---------+---------+|  3 | 小肖      |   29 | 30000.0 |       1 ||  4 | 小东      |   30 | 40000.0 |       2 ||  6 | 小非      |   24 | 23456.0 |       3 ||  7 | 晓飞      |   30 | 15000.0 |       4 ||  8 | 小林      |   23 | 24000.0 |    NULL || 10 | 小五      |   20 |  4500.0 |    NULL || 11 | 张山      |   24 | 40000.0 |       1 || 12 | 小肖      |   28 | 35000.0 |       2 || 13 | 李四      |   23 | 50000.0 |       1 || 17 | 王武      |   24 | 56000.0 |       2 || 18 | 猪小屁    |    2 | 56000.0 |       2 || 19 | 小玉      |   25 | 58000.0 |       1 || 21 | 小张      |   23 | 50000.0 |       1 || 22 | 小胡      |   25 | 25000.0 |       2 || 96 | 小肖      |   19 | 35000.0 |       1 || 97 | 小林      |   20 | 20000.0 |       2 |+----+-----------+------+---------+---------+16 rows in set (0.16 sec)mysql> SELECT-> dept_id,-> GROUP_CONCAT(name ORDER BY age DESC SEPARATOR '*') -- 分组中的name中的多行数据将按照age降序进行连接,分隔符为 * -> FROM employee2-> GROUP BY dept_id; -- 注意如果这里没有GROUP BY dept_id,那么就会因为输出dept_id而发生报错+---------+----------------------------------------------------+| dept_id | GROUP_CONCAT(name ORDER BY age DESC SEPARATOR '*') |+---------+----------------------------------------------------+|    NULL | 小林*小五                                           ||       1 | 小肖*小玉*张山*小张*李四*小肖                          ||       2 | 小东*小肖*小胡*王武*小林*猪小屁                         ||       3 | 小非                                                ||       4 | 晓飞                                                |+---------+----------------------------------------------------+mysql> SELECT-> GROUP_CONCAT(name SEPARATOR '*') -> FROM employee2; -- 这时候虽然没有使用GROUP BY,但是可以正常运行,此时是将所有的name连接,连接时为无序,分隔符为*+-------------------------------------------------------------------------------------------------------+| GROUP_CONCAT(name SEPARATOR '*')                                                                      | +--------------------------------------------------------------------------------------------------------| 小肖*小东*小非*晓飞*小林*小五*张山*小肖*李四*王武*猪小屁*小玉*小张*小胡*小肖*小林                                | +-------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT-> GROUP_CONCAT(DISTINCT name SEPARATOR '*') -- 将不同的name进行连接-> FROM employee2;+-----------------------------------------------------------------------------------------------+| GROUP_CONCAT(DISTINCT name SEPARATOR '*')                                                     |+-----------------------------------------------------------------------------------------------+| 小东*小五*小张*小林*小玉*小肖*小胡*小非*张山*晓飞*李四*猪小屁*王武                            |+-----------------------------------------------------------------------------------------------+1 row in set (0.00 sec)mysql> SELECT-> dept_id,-> GROUP_CONCAT(name) AS employees-> FROM employee2-> GROUP BY dept_id; -- 输出每个部门的员工,每个员工之间用逗号分隔,因为没有写SEPARATOR ,所以就默认以逗号分隔+---------+----------------------------------------------+| dept_id | employees                                    |+---------+----------------------------------------------+|    NULL | 小林,小五                                    ||       1 | 小肖,张山,李四,小玉,小张,小肖                ||       2 | 小东,小肖,王武,猪小屁,小胡,小林              ||       3 | 小非                                         ||       4 | 晓飞                                         |+---------+----------------------------------------------+5 rows in set (0.00 sec)mysql> SELECT-> dept_id,-> GROUP_CONCAT(DISTINCT name) -- 将不同的name连接,并且用逗号分隔-> AS employees-> FROM  employee2-> GROUP BY dept_id;+---------+----------------------------------------------+| dept_id | employees                                    |+---------+----------------------------------------------+|    NULL | 小五,小林                                    ||       1 | 小张,小玉,小肖,张山,李四                     ||       2 | 小东,小林,小肖,小胡,猪小屁,王武              ||       3 | 小非                                         ||       4 | 晓飞                                         |+---------+----------------------------------------------+5 rows in set (0.00 sec)

所以利用GROUP_CONCAT,就可以解决按照dept_no进行汇总题目(牛客题)了.
值得一提的是,GROUP_CONCAT只是将xxx这一列中的多行数据进行连接成为一行字符串,而CONCAT则是可以将多列数据进行连接。所以当GROUP_CONCAT和(CONCAT_WS或者CONCAT)一起使用的时候,使得查询更加有效.例如下面的例子正是如此:

  mysql> SELECT * FROM employee2;+----+-----------+------+---------+---------+| id | name      | age  | salary  | dept_id |+----+-----------+------+---------+---------+|  3 | 小肖      |   29 | 30000.0 |       1 ||  4 | 小东      |   30 | 40000.0 |       2 ||  6 | 小非      |   24 | 23456.0 |       3 ||  7 | 晓飞      |   30 | 15000.0 |       4 ||  8 | 小林      |   23 | 24000.0 |    NULL || 10 | 小五      |   20 |  4500.0 |    NULL || 11 | 张山      |   24 | 40000.0 |       1 || 12 | 小肖      |   28 | 35000.0 |       2 || 13 | 李四      |   23 | 50000.0 |       1 || 17 | 王武      |   24 | 56000.0 |       2 || 18 | 猪小屁    |    2 | 56000.0 |       2 || 19 | 小玉      |   25 | 58000.0 |       1 || 21 | 小张      |   23 | 50000.0 |       1 || 22 | 小胡      |   25 | 25000.0 |       2 || 96 | 小肖      |   19 | 35000.0 |       1 || 97 | 小林      |   20 | 20000.0 |       2 |+----+-----------+------+---------+---------+16 rows in set (0.00 sec)mysql> SELECT-> dept_id,-> GROUP_CONCAT(CONCAT(name,"(",salary,")") SEPARATOR ';') -- 将利用name(salary)进行连接,其中分隔符为';'-> FROM-> employee2-> GROUP BY dept_id;+---------+---------------------------------------------------------------------------------------------+| dept_id | GROUP_CONCAT(CONCAT(name,"(",salary,")") SEPARATOR ';')                                       +---------+---------------------------------------------------------------------------------------------+|    NULL | 小林(24000.0);小五(4500.0)                                                                     |       1 | 小肖(30000.0);张山(40000.0);李四(50000.0);小玉(58000.0);小张(50000.0);小肖(35000.0)               |       2 | 小东(40000.0);小肖(35000.0);王武(56000.0);猪小屁(56000.0);小胡(25000.0);小林(20000.0)             |       3 | 小非(23456.0)                                                                                 |       4 | 晓飞(15000.0)                                                                                 +---------+---------------------------------------------------------------------------------------------+5 rows in set (0.30 sec)

详细的可以看一下这篇文章:MySQL group_concat()

MySQL group_concat()详解相关推荐

  1. pandas读写MySQL数据库详解及实战

    pandas读写MySQL数据库详解及实战 SQLAlchemy是Python中最有名的ORM工具. 关于ORM: 全称Object Relational Mapping(对象关系映射). 特点是操纵 ...

  2. Mysql Explain 详解

    Mysql Explain 详解 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二. ...

  3. MySQL存储过程详解 mysql 存储过程

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  4. mysql存储过程详解[转]

    mysql存储过程详解[转] 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功 ...

  5. mysql-win安装教程,WINDOWS下安装MYSQL教程详解

    1.下载安装包 2.配置环境变量 2.1 解压所下载的压缩包 2.2 环境变量 win 10 电脑 这么进去 3.生成data文件 在你解压的目录下,eg:F:\Program Files\mysql ...

  6. MySQL Explain详解,分析语句为何运行慢

    MySQL Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语 ...

  7. 史上最简单MySQL教程详解(进阶篇)之存储过程(一)

    史上最简单MySQL教程详解(进阶篇)之存储过程(一) 史上最简单MySQL教程详解(进阶篇)之存储过程(一) 什么是存储过程 存储过程的作用 如何使用存储过程 创建存储过程 DELIMITER改变分 ...

  8. 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

    什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...

  9. mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例

    <MysqL教程MysqL 复制详解及简单实例>要点: 本文介绍了MysqL教程MysqL 复制详解及简单实例,希望对您有用.如果有疑问,可以联系我们. MysqL 复制详解及简单实例 主 ...

最新文章

  1. DotNetCore跨平台~System.DrawingCore部署Linux需要注意的
  2. 23个MySQL常用查询语句
  3. python操作sqlserver如何判断删除的数据不存在_Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法...
  4. c#语言文件扩展名,C#应用程序项目文件的扩展名是()。
  5. 汽车维修行业呼吁大学生加入修车行列
  6. antlr idea 入门_ANTLR入门:构建简单的表达语言
  7. LiteIDE 编写Go的单元测试
  8. python之集合操作 - |
  9. 在linux上配置telnet服务器,Ubuntu 10.10 下配置Telnet服务器
  10. 求过度矩阵+(二次型标准化)正交变换的过度矩阵
  11. 【Win10】【亲手解决】华硕笔记本重装系统遇到的各种问题【包括重启会自动修复】
  12. java判断数的奇偶性_判断一个数的奇偶性
  13. linux系统日志报错kernel,Linux 系统日志 kernel: __ratelimit: xxx callbacks suppressed-Fun言...
  14. Vue 开始时间与结束时间比较验证
  15. jpeg图像质量参数及icc信息提取
  16. 仿联想商城laravel实战---2、后端页面搭建(验证码如何在页面中使用)
  17. win8右下角网络图标不见了_win8系统右下角的音量图标不见了的具体办法
  18. 2021.3.2-3.8 人工智能行业每周技术动态
  19. Android图像处理之图形特效处理
  20. 计算机基础学习(云计算)

热门文章

  1. 关于中华万年历,美拍,糗事百科的无聊调侃
  2. safengine shielden
  3. 用友t3 xp系统服务器,用友T3-财务通windows xp系统下安装sql2005
  4. 轻松无广告:推荐一款高效提醒软件
  5. 2018年上海各区重点小学排名
  6. 大学计算机专业绩点在3.5算好,绩点3.5是什么水平 算优秀吗
  7. 产销平衡的运输问题上机实验matlab_在产销平衡的运输问题中,下列说法 错误 的是( )_学小易找答案...
  8. 升级系统后,虚拟机无法启动解决方案。
  9. 运维之道 | Nginx调优
  10. mysql 两张表当成一张表查询