mysql之group_concat函数
mysql之group_concat函数
在介绍GROUP_CONCAT之前,我们先来看看concat()函数和concat_ws()函数。
先准备一个测试数据库:
mysql> select * from scores;
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan | 100   |
|  2 | lisi     | 90    |
|  3 | wangwu   | 99    |
|  4 | zhangsan | 92    |
|  5 | zhangsan | 88    |
|  6 | lisi     | 89    |
+----+----------+-------+
6 rows in set
concat()函数
concat()函数的功能是将多个字符连接成一个字符串。
语法: concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
mysql> select *,concat(name,score) from scores;
+----+----------+-------+--------------------+
| id | name     | score | concat(name,score) |
+----+----------+-------+--------------------+
|  1 | zhangsan | 100   | zhangsan100        |
|  2 | lisi     | 90    | lisi90             |
|  3 | wangwu   | 99    | wangwu99           |
|  4 | zhangsan | 92    | zhangsan92         |
|  5 | zhangsan | 88    | zhangsan88         |
|  6 | lisi     | 89    | lisi89             |
+----+----------+-------+--------------------+
6 rows in set
-- 加分隔符 & 起别名
mysql> select *,concat(name,':',score) as info from scores;
+----+----------+-------+--------------+
| id | name     | score | info         |
+----+----------+-------+--------------+
|  1 | zhangsan | 100   | zhangsan:100 |
|  2 | lisi     | 90    | lisi:90      |
|  3 | wangwu   | 99    | wangwu:99    |
|  4 | zhangsan | 92    | zhangsan:92  |
|  5 | zhangsan | 88    | zhangsan:88  |
|  6 | lisi     | 89    | lisi:89      |
+----+----------+-------+--------------+
6 rows in set
concat_ws()函数
concat()函数加分隔符比较麻烦,如果有10个字段连接起来,就得写9个分隔符,concat_ws()函数就是为了解决这个问题。concat_ws就是concat with separator。
语法: concat_ws(separator, str1, str2, ...)
第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
mysql> select *,concat_ws(':',name,score) as info from scores;
+----+----------+-------+--------------+
| id | name     | score | info         |
+----+----------+-------+--------------+
|  1 | zhangsan | 100   | zhangsan:100 |
|  2 | lisi     | 90    | lisi:90      |
|  3 | wangwu   | 99    | wangwu:99    |
|  4 | zhangsan | 92    | zhangsan:92  |
|  5 | zhangsan | 88    | zhangsan:88  |
|  6 | lisi     | 89    | lisi:89      |
+----+----------+-------+--------------+
6 rows in set
group_concat函数
明白了concat()和concat_ws()函数,我们来看一下GROUP_CONCAT()函数。它的功能就是将group by产生的同一个分组中的值连接起来,返回一个字符串结果。如果单独使用,那么就将指定字段所有的值连接起来。
语法:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ][separator '分隔符'] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
我们知道可以使用group by语句对结果进行分组处理:
mysql> select * from scores group by name;
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  2 | lisi     | 90    |
|  3 | wangwu   | 99    |
|  1 | zhangsan | 100   |
+----+----------+-------+
3 rows in set
但是我们只能看到zhangsan的第一个成绩,如果我想看到所有的成绩呢?
mysql> select *,group_concat(score) from scores group by name;
+----+----------+-------+---------------------+
| id | name     | score | group_concat(score) |
+----+----------+-------+---------------------+
|  2 | lisi     | 90    | 90,89               |
|  3 | wangwu   | 99    | 99                  |
|  1 | zhangsan | 100   | 100,92,88           |
+----+----------+-------+---------------------+
3 rows in set
-- 将分组结果按升序排序,并使用分隔符 :
mysql> select *,group_concat(score order by score separator ':') from scores group by name;
+----+----------+-------+--------------------------------------------------+
| id | name     | score | group_concat(score order by score separator ':') |
+----+----------+-------+--------------------------------------------------+
|  2 | lisi     |    90 | 89:90                                            |
|  3 | wangwu   |    99 | 99                                               |
|  1 | zhangsan |   100 | 88:92:100                                        |
+----+----------+-------+--------------------------------------------------+
3 rows in set
-- 上面展示了以name分组后所有的score,现在多加展示一个id
mysql> select *,group_concat(concat_ws(':',id,score) order by id) from scores group by name;
+----+----------+-------+---------------------------------------------------+
| id | name     | score | group_concat(concat_ws(':',id,score) order by id) |
+----+----------+-------+---------------------------------------------------+
|  2 | lisi     |    90 | 2:90,6:89                                         |
|  3 | wangwu   |    99 | 3:99                                              |
|  1 | zhangsan |   100 | 1:100,4:92,5:88                                   |
+----+----------+-------+---------------------------------------------------+
3 rows in set
-- 单独使用
mysql> select group_concat(score) from scores;
+---------------------+
| group_concat(score) |
+---------------------+
| 100,90,99,92,88,89  |
+---------------------+
1 row in set
参考:
mysql之group_concat函数的更多相关文章
- MySQL中group_concat函数-和group by配合使用
		MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ... 
- MySQL中group_concat函数深入理解
		本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ... 
- MySQL中group_concat函数
		本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) .MySQL中group_concat函数完整的语法如下:group_c ... 
- 【转】mysql的group_concat函数,默认最大长度是1024
		mysql的group_concat函数,默认最大长度是1024 查询sql: show variables like 'group_concat_max_len'; 设置方式: 修改配置文件my.i ... 
- MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容
		本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ... 
- mysql中group_concat函数用法
		该函数返回带有来自一个组的连接的非NULL值的字符串结果.该函数是一个增强的Sybase SQL Anywhere支持的基本LIST()函数. 语法结构: GROUP_CONCAT([DISTINCT ... 
- 利用MySQL 的GROUP_CONCAT函数实现聚合乘法
		MySQL 聚合函数里面提供了加,平均数.最小,最大等,可是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法. 先创建一张演示样例表: CREATE TABLE ` ... 
- MYSQL中group_concat( )函数中参数的排序方法
		使用mysql中的group_concat( )函数连接指定字段时,可以先对该字段进行排序. PS:是因为二刷mysql的51道题的第12题遇到的:查询和" 01 "号同学学习的课 ... 
- 关于Mysql中GROUP_CONCAT函数返回值长度的坑
		1.GROUP_CONCAT函数: 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果. 语法:group_concat( [distinct] 要连接的字段 [order b ... 
随机推荐
- springboot启动流程(一)构造SpringApplication实例对象
			所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 启动入口 本文是springboot启动流程的第一篇,涉及的内容是SpringApplicat ... 
- vue学习(4)-组件的创建,父子组件传值,$refs
			模块化:代码逻辑 组件化:UI 组件的创建:1. 
- OpenCV手工实现灰度及RGB直方图
			手工实现灰度及RGB直方图 !库 1. 灰度图像直方图 算法 1. 图片灰度化: 2. 遍历Mat,统计各灰度级的像素个数: 3. 根据opencv画点线函数,绘制坐标轴及像素分布图 源码(编译环境: ... 
- Sqlmap对dvwa进行sql注入测试
			前提准备条件: 1.下载安装dvwa,下载链接地址:http://www.dvwa.co.uk/.2.需要安装python运行环境.3.下载sqlmap包并将其解压. 一.查看所有的数据库;(其中db ... 
- C语言Makefile文件制作
			本文摘抄自“跟我一起写Makefile ”,只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org.cn/%E8%B7% ... 
- jajx 传参 需要 判断的 条件
			1.有没有权限. 2.数据类型 对不对 例如 id ,page 传过来时是str 类型, view中处理时需要转换成 int类型. 如果 不能转 就会报错.. 3.查询数据.数据不存在也要报错... ... 
- Jquery select 三级联动 (需要JSON数据)
			Scripts/Category.js //Jquery三级类别联动 $(function () { BindCategory(); }) function BindCategory() { var ... 
- [Algorithm] Tree Width with Level Width
			// --- Directions // Given the root node of a tree, return // an array where each element is the wid ... 
- winfrom窗体自适应
			using System.Runtime.InteropServices; public class Win32 { public const Int32 AW_HOR_POSITIVE = 0x00 ... 
- mysql 数据库练习题
			前面学习了MySQL的语句的基本用法,这里就开始做一些MySQL练习,这套题目一共45题,属于比较简单的,初学先试着做这个. 参考链接:https://www.cnblogs.com/SJP666/p ... 
