MySQL group_concat()详解

  • 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言编写劫持dll,c语言-----劫持自己02

在上一节 c语言-----劫持原理01 已经叙述了劫持原理,下边正式进入劫持实战1. 需要实现的功能在c语言中system("notepad") 可以打开一个记事本system("mspaint") 可以打开画图工具所以这次我们需要把 可以打开一个记事本 这个功能更改为 在控制…

Java中Runtime类

一、概述 Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前R…

长春理工大学c语言实验题库,长春理工大学首届趣味心理知识竞赛初赛题库.doc...

长春理工大学首届趣味心理知识竞赛初赛题库长春理工大学首届趣味心理知识竞赛初赛题库心理知识简述1.心理学概念心理学是研究人的心理活动及其发生、发展规律的科学。人的心理是以不同的形式能动地反映客观事物及其相互关系的活动。人的心理活动包括有紧密联系的两个方面&#…

在Java中调用Python

写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题&#…

android 导航动画,安利一个Android导航库

SlidingRootNav这是一个像DrawerLayout一样的抽屉式的导航库,这个库实现的抽屉在content view的下层,滑动之后,才能看到相应的导航页使用Gradle添加依赖compile com.yarolegovich:sliding-root-nav:1.0.2使用说明创建一个 content_view.xml或…

将String集合转为Integer集合的三种方法

第一种方法&#xff1a; List<String> list Arrays.asList("1", "2", "3", "4", "5");// method1 创建一个Integer类型的集合&#xff0c;循环遍历String类型的数组并把数据添加进集合List<Integer> integerLi…

android 界面组件,安卓开发学习周第三篇——Android中的UI组件

原标题&#xff1a;安卓开发学习周第三篇——Android中的UI组件在Android APP中&#xff0c;所有的用户界面元素都是由View和ViewGroup的对象构成的。View是绘制在屏幕上的用户能与之交互的一个对象。而ViewGroup则是一个用于存放其他View(和ViewGroup)对象的布局容器&#xff…

Spring Boot集成Druid出现异常报错的原因及解决

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况&#xff0c;天生就是针对监控而生的 DB 连接池。本文讲述了Spring Boot集成Druid项目中discard long time none received connection异常的解决方法&#xff0c;出现此问题的同学可以参考下 文章目录Spring Boot集成Druid异常…

BigDecimal.ZERO替代new BigDecimal(0)

这里只是想分享下&#xff0c;平时如果我们想要定义一些BigDecimal类型的变量&#xff0c;可以先看看BigDecimal有没有已经先做了定义&#xff0c;如new BigDecimal(0)就可以用BigDecimal.ZERO来代替&#xff0c;如下&#xff1a; BigDecimal bigDecimal BigDecimal.ZERO;描述…

用js拼html写下拉框,js实现下拉框效果(select)

效果图&#xff1a;代码如下&#xff1a;*{padding: 0;margin:0;}ul,li{list-style: none}.left{float: left;}.right{float: right;}.select_contain{font-size: 14px;color: #333;line-height: 38px;margin: 30px 0;}.select_item{margin-right: 50px;position: relative;}.s…

Gson Builder — 基础 命名策略

文章目录Gson Builder — 基础& 命名策略GsonBuilder 基础命名策略字段命名策略 - IDENTITY字段命名策略 - LOWER_CASE_WITH_UNDERSCORES字段命名策略 - LOWER_CASE_WITH_DASHES字段命名策略 - UPPER_CAMEL_CASE字段命名策略 - UPPER_CAMEL_CASE_WITH_SPACESSerializedName…

keil html转换工具,网页转换工具FCARM和makefsfile的使用简介

网页转换工具FCARM和makefsfile的使用简介[复制链接]首先在这里要提一下Keil的网页转换工具FCARM.exe的使用&#xff0c;花费了我好几个小时。TI也有一个类似的程序&#xff0c;是Makefsfile&#xff0c;并且源码公开的。1.gif (31.45 KB, 下载次数: 0)2010-11-8 16:44 上传2.j…

Google Gson用法详解

文章目录一、简介二、依赖三、基本用法1、创建Gson实例1.1、new Gson()1.2、GsonBuilder.build()2、Java对象–>JSON3、JSON–>Java对象4、漂亮地输出5、JSON array --> Java array/list5.1 、 JSON array -->Java对象5.2 、JSON array–>List5.3 、JSON array–…

android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解

1.loadfile——只编译&#xff0c;不运行javaloadfile故名思议&#xff0c;它只会加载文件&#xff0c;编译代码&#xff0c;不会运行文件里的代码。好比&#xff0c;咱们有一个hellofile.lua文件&#xff1a;函数复制代码代码以下:print(“hello”);function hehe()print(“he…

建筑学跨专业计算机考研方向,不适合女生报考的考研专业你知道几个?

近几年女生考研的比例越来越高&#xff0c;中西部在校女研究生占比约为55%作为考研的主力军一些专业对女生并不是特别友好无论是报考率还是就业率都非常低&#xff0c;男怕入错行&#xff0c;其实女生也怕!今天帮大家盘点了不适合女生的8个专业&#xff1a;一、机械专业俗话说&…

Socket通信原理

Socket通信原理 一、Socket的定义 1、Socket是一个网络通信的套接字&#xff08;接口&#xff09; 二、Socket的实现流程 1、Socket在客户端和服务端发生了什么&#xff1f; 服务器&#xff1a; a.socket()创建socket对象 b.bind()为socket对象绑定协议&#xff0c;赋予名…

向量除法能用计算机吗,为什么向量没有除法

满意答案(1)点乘是求向量数量积的运算&#xff0c;也叫内积&#xff0c;结果为实数&#xff0c;进了大学会学到外积&#xff0c;结果仍为向量(2)向量之间进行除法运算&#xff0c;使用不加点的矩阵除法“A/B”时&#xff0c;问题可以描述为:给定两个向量A、B&#xff0c;求一个…

CRC校验原理及步骤

1、CRC是用来干嘛的&#xff1f; 检测数据传输过程中是否出现错误&#xff08;某些位&#xff0c;或某几位&#xff0c;或者某块区域位错误&#xff09;。 2、CRC是否能校正数据传输中的错误&#xff1f; CRC只能检错&#xff0c;不能纠错。如果发现错误&#xff0c;可根据双…

在组策略中用户策略仅对特定计算机生效,将组策略应用到满足条件的计算机---配置组策略筛选...

配置组策略筛选Microsoft?Windows?Management Instrumentation (WMI) 大概是我们已知的 Microsoft 保存最好的秘密。尽管如此&#xff0c;但毫无疑问&#xff0c;WMI 是 Microsoft 主要的针对 Windows 的管理支持技术。在Windows Server 2008的组策略高级管理中&#xff0c;对…

Calendar类要点、易错点Calendar中的DATE 和 DAY_OF_MONTH 和 DAY_OF_YEAR

Calendar类要点、易错点 简介&#xff1a; 用于日期的计算。 是一个抽象类&#xff0c;得用它的静态方法getInstance()获取&#xff08;它的子类&#xff09;实例。&#xff08;会根据地区的不同创建当地使用的日历&#xff09; 将年月日等都存在了它的一个private数组里&a…