(编写不易,转载请注明: https://shihlei.iteye.com/blog/2442053)
一 概述
继续支持运营出统计数据,需要行转列,看来下 GROUP_CONCAT 函数,做个记录。
二 场景
1) 表结构
员工表employee
id, name , type , age, leader
CREATE TABLE `employee`( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id', `name` VARCHAR(100) NOT NULL COMMENT '姓名', `type` VARCHAR(2) NOT NULL COMMENT '类别 A,B,C', `age` INT(2) NOT NULL COMMENT '年龄', `leader` VARCHAR(100) NOT NULL COMMENT '组长', PRIMARY KEY (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'; insert into `employee`(`name`,`type`,`age`,`leader`) values ('name_10','A',10,'tom'), ('name_45','A',45,'tom'), ('name_47','A',47,'mike'), ('name_60','A',60,'tom'), ('name_12','A',12,'tom'), ('name_70','A',70,'tom'), ('name_10','B',10,'mike'), ('name_50','B',50,'tom'), ('name_51','B',51,'tom');
2)统计需求
查询各个leader 下 年龄大于40岁的各类员工,按如下表头输出,按年龄从小到大
表头:leader,A类员工,B类员工
3)脚本
SELECT leader, GROUP_CONCAT(IF(`type`='A' AND `age` > 40,`name`,NULL) ORDER BY `age`) as 'A类员工', GROUP_CONCAT(IF(`type`='B' AND `age` > 40,`name`,NULL) ORDER BY `age`) as 'B类员工' FROM employee GROUP BY leader;
4) 结果
三 函数说明
1) 定义:
GROUP_CONCAT ( [DISTINCT] col_name1 [ORDER BY clause] [SEPARATOR str_val] )
2)说明:
用于行转列,依赖group by分组,可以配合IF函数进行条件拼接
- Dinstinct: 指定是否排重
- Order By: 指定排序字段
- Separator: 指定分隔符,默认逗号
3)关于拼接长度限制:
GROUP_CONCAT 通过 group_concat_max_len 变量 设置了 拼接的长度限制,超过最大显示会被截断,可以通过修改该变量保证不被截断
查看长度限制 :show variables like 'group_concat_max_len';
修改:
SET GLOBAL group_concat_max_len = 102400; SET SESSION group_concat_max_len = 102400;
或者 设置 group_concat_max_len = -1 指定最大
相关推荐
GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” , 如果需要自定义分隔符可以使用 SEPARATOR 如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制: GROUP_CONCAT...
本文实例分析了MySQL统计函数GROUP_CONCAT使用中的陷阱。分享给大家供大家参考,具体如下: 最近在用MySQL做一些数据的预处理,经常会用到group_concat函数,比如类似下面一条语句 代码如下:mysql>select aid,group...
语法: GROUP_CONCAT([DISTINCT] expr [,expr …][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name …]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表...
MySQL中group_concat函数,完整的语法如下: 代码如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’]) 基本查询 代码如下:select * from aa; 代码如下:+——+——+|...
SQLServer GroupConcat 的CLR实现,和Oracle 的 GroupConcat相同
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。 MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] ...
本文实例讲述了mysql中GROUP_CONCAT的使用方法。分享给大家供大家参考,具体如下: 现在有三个表,结构如下: cate表: CREATE TABLE `cate` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `...
group_concat()函数的参数是可以直接使用order by排序的。666。。 下面通过例子来说明,首先看下面的t1表。 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序。 可以这样写...
通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列合并显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。 合并的...
利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行。 其完整语法: GROUP_CONCAT(expr) 该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示: GROUP...
您可能感兴趣的文章:MySql采用GROUP_CONCAT合并多条数据显示的方法mysql利用group_concat()合并多行数据到一行mysql如何实现多行查询结果合并成一行关于mysql合并表的详细介绍mysql中合并两个字段的方法分享mysql...
sybase数据库是不支持group_concat函数的,此文件为sybase存储过程样例,可以将多行信息按标识合并为一行多列。
同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只显示a表记录行数,则需要把查询name字段得到的多行记录进行合并,可以通过程序实现,但也可直接在sql层完成。...
要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮:sparkles:登场 GROUP_CONCAT(expr) 在 Mysql 官方文档 中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 GRO
sql server 用于行转列,省得各位去找语句,select to_char(wm_concat('''' || valuelabel || '''')) name from (select distinct t.valuelabel from structuredrecruit t) select * from (select t.uhid, t....
优化sql的数据。 select * from (select PI.ID AS ProductID,PI.SynapsID,PI.NameCode,PI.Name_cn,PI.Name_en,PP.PicName,PI.BarCode, PI.NewLevel,PI.`Status`,PI.HighPrice,CPM.SalesPlaceID, psi.WIID,psi....
本文实例讲述了MySql采用GROUP_CONCAT合并多条数据显示的方法,分享给大家供大家参考。具体实现方法如下: 假设有这样一个需求: 1:班级表: id class_name 2:学生表: id name class_id 如果我们要查所有的班级...
前天在生产环境中遇到一个问题:使用 GROUP_CONCAT 函数select出来的数据被截断了,最长长度不超过1024字节,开始还以为是navicat客户端自身对字段长度做了限制的问题。后面故意重新INSERT了一个字段长度超1024字节...
前言 有时会遇到没有遵守第一范式设计模式的业务表。即一列中存储了多个属性值。如下表 pk value ...SQL如下: ...select distinct(substring_index(substring_index(a.col,',',b.help_topic_id... (select group_concat
select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),’ MB’) as data_size,concat(truncate(sum(index_length)/1024/1024,2),’MB’) as index_sizefrom information_schema.tablesgroup by ...