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 ...
随机推荐
- 普通选项卡+自动播放功能+向前/向后按钮 原生js
今天做了幻灯片,主要功能包括:普通选项卡,向前/向后播放按钮,向前?向后播放功能,自动播放功能 要实现简单选项卡功能是没有问题的,但是添加功能就出现各种各样的问题了 遇到的问题:1 下标问题 2普通选 ...
- linux c 错误的捕获
经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因.这个时候使用 ...
- IT 界那些朗朗上口的“名言”
中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影响潜移默化! Stay hungry Stay ...
- Image Processing and Analysis_15_Image Registration: A Method for Registration of 3-D shapes——1992
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- Grassfire算法- 运动规划(Motion planning)
Grassfire算法: 一.概念 这个算法是做图像处理的抽骨架处理,目的是求出图像的骨架,可以想象一片与物体形状相同的草,沿其外围各点同时点火.当火势向内蔓延,向前推进的火线相遇处各点的轨迹就是中 ...
- Java学习第一天之简单了解java语言及开发环境的安装
一.初步了解Java语言 Java语言是由Sun公司的James Gosling创造的一门面向对象的高级语言. 2009年4月20日,Sun公司被Oracle以总价值约为74亿美元的价格收购,Java ...
- 全排列 递归方法(permutation原理
https://blog.csdn.net/axiqia/article/details/50967863 原博客 (一)递归的全排列算法 (A.B.C.D)的全排列为 1.A后面跟(B.C.D)的 ...
- golang 2 ways to delete an element from a slice
2 ways to delete an element from a slice yourbasic.org/golang Fast version (changes order) a := []st ...
- javaweb的maven项目结构
本来准备看javaweb的项目结构,因为之前自己建maven的项目结构,总是各种出错,后来干脆用maven自己携带的项目结构. 一个最基本的web目录结构如下,红框部分为必须有的,其他的随意. 这是一 ...
- react-router和react-router-dom的区别
RR4 本次采用单代码仓库模型架构(monorepo),这意味者这个仓库里面有若干相互独立的包,分别是: react-router React Router 核心 react-router-dom 用 ...