Mysql中关于 group_concat函数详解
group_concat()主要功能:能将相同的行组合起来
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
基本查询
- select * from aa;
+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔(默认)
- select id,group_concat(name) from aa group by id;
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,分号分隔
- select id,group_concat(name separator ';') from aa group by id;
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行,
逗号分隔
- select id,group_concat(distinct name) from aa group by id;
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序
- select id,group_concat(name order by name desc) from aa group by id;
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
测试sql,项目中用到的。
- SELECT
- EMPLOYEES.EMPID
- ,EMPLOYEES.EMPNAME
- ,DEPARTMENTS.DEPARTMENTNAME
- ,EMPLOYEES.DEPTID
- ,EMPLOYEES.EMPPWD
- ,EMPLOYEES.INSIDEEMAIL
- ,EMPLOYEES.OUTSIDEEMAIL
- ,EMPLOYEES.DELEFLAG
- ,EMPLOYEES.EMPCLASS
- ,(CONCAT('[', <span style="color: #ff0000;">GROUP_CONCAT</span>
- (ROLE.Role_Name SEPARATOR '],['), ']')) AS ROLENAME
- ,(concat( '[', (
- SELECT
- <span style="color: #ff0000;">GROUP_CONCAT</span>
- (DEPARTMENTS.DEPARTMENTNAME separator '],[')
- FROM
- EMP_ROLE_DEPT
- LEFT JOIN DEPARTMENTS
- ON (
- DEPARTMENTS.DEPARTMENTID = EMP_ROLE_DEPT.DEPTID
- AND DEPARTMENTS.DELEFLAG = 0
- )
- GROUP BY
- EMP_ROLE_DEPT.EMPID
- HAVING
- EMP_ROLE_DEPT.EMPID = EMPLOYEES.EMPID
- ),']')) AS DEPARTMENTRIGHT
- FROM
- EMPLOYEES
- LEFT JOIN DEPARTMENTS
- ON (
- DEPARTMENTS.DEPARTMENTID = EMPLOYEES.DEPTID
- AND DEPARTMENTS.DELEFLAG = 0
- )
- LEFT JOIN ROLE_EMP
- ON (ROLE_EMP.EMP_ID = EMPLOYEES.EMPID)
- LEFT JOIN ROLE
- ON (ROLE_EMP.ROLE_ID = ROLE.ROLE_ID)
- <span style="color: #ff0000;"> GROUP BY
- EMPLOYEES.EMPID</span>
- HAVING
- EMPLOYEES.EMPID LIKE '%%'
- AND EMPLOYEES.EMPNAME LIKE '%%'
- AND EMPLOYEES.DELEFLAG = 0
- AND (
- EMPLOYEES.EMPCLASS = '1'
- OR EMPLOYEES.EMPCLASS = '2'
- )
- AND EMPLOYEES.DEPTID = '001' LIMIT 0
- ,16
相关文章
- Mysql主从复制
- Navicat Premium连接MySQL 1251错误和Mysql初始化root密码和允许远程访问
- MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题
- Mac Pro 解压安装MySQL二进制分发版 mysql-5.6.30-osx10.11-x86_64.tar.gz(不是dmg的)
- 【MySQL】删除大量数据的具体实现
- shell安装mysql,连接数据库,创建数据库
- MySQL配置文件mysql.ini参数详解、MySQL性能优化
- mysql优化方案总结
- MySQL 5.5 服务器变量详解二(转)
- mysql增量备份还原详解
- 【转载】彻底解决Linux下MySQL 5.5的中文乱码问题
- MySQL内核月报 2015.02-TokuDB · 特性分析· 日志详解
- MySQL运维---慢日志与备份
- MySQL 视图(详解)& navicat如何创建视图
- Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)
- MySQL事务详解
- mysql优化 update中的in子句
- [转]mysql变量使用总结
- mysql一些使用技巧
- ACID_MySQL事务的四大特性详解(MySQL高频面试题)
- 详解MySQL information_schema数据库常用的表信息以及各表对应的字段信息;以及如何登录mysql和创建视图
- mysql 清除relay-log文件方法详解
- MySQL数据库事务隔离级别(Transaction Isolation Level)
- Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
- MySQL数据库高并发优化配置
- Mysql 中source命令详解
- Mysql中的auto_increment关键字详解
- MySQL数据库篇之mysql的快速启动和停止
- MySQL mydumper使用方法详解
- [MySQL] 解决办法: Error: Transaction test error: file /etc/my.cnf from install of mysql-community-server