mysql 列转行,合并字段
数据表:

列转行:利用max(case when then)
max---聚合函数 取最大值(case course when '语文' then score else 0 end) ---判断 as 语文---别名作为列名SELECT
`name`,
MAX(
CASE
WHEN course='语文' THEN
score
END
) AS 语文,
MAX(
CASE
WHEN course='数学' THEN
score
END
) AS 数学,
MAX(
CASE
WHEN course='英语' THEN
score
END
) AS 英语
FROM
student
GROUP BY `name`
;

合并字段显示:利用group_cancat(course,”:”,”score”)
SELECT
`name`,
GROUP_CONCAT(course, ":", score) AS 成绩
FROM
student
GROUP BY
`name`;

group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
比较抽象,难以理解。
通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函
数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。
group_concat函数应该是在内部执行了group by语句,这是我的猜测。
1.测试语句:
SELECT
GROUP_CONCAT(`name`)
FROM
student
GROUP BY
`name`;
结果去查找name中去查找哪些值是一样的,如果相等,就全部列出来,以逗号分割进行列出,如下:
group_concat('name')
2.测试:
SELECT
GROUP_CONCAT(`name`)
FROM
student
;
结果:
group_concat('name')
上面是否可以证明,group_concat只有与group by语句同时使用才能产生效果? 下面进行了实际测验
3.测试常量对group_concat()的配置影响:
SET @@GROUP_CONCAT_MAX_LEN=4
手册中提到设置的语法是这样的:
SET [SESSION | GLOBAL] group_concat_max_len = val;
两种有什么区别?
SET @@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;
4.使用语句
SELECT
GROUP_CONCAT(`name`)
FROM
student;
结果得到:
group_concat('name')

结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果。
原因可以这样理解:group_concat()得到是属于x组的所有成员(函数里面列参数指定需要显示哪些字段)。x组从哪里来?如
果没有group by进行指定,那么根本不知道group_concat()根据哪个分组进行显示出成员。 所以,像上面没有group by子句
的时候,就显示了刘备,关羽,张飞,刘备,关羽,张飞,刘备,关羽,张飞。
实际中什么时候需要用到这个函数?
假如需要查询的结果是这样:左边显示组名,右边想显示该组别下的所有成员信息。用这个函数,就可以省去很多事情了。
另外,假如我这样使用:
SELECT
`name`,
GROUP_CONCAT(course, ":", score) AS 成绩
FROM
student
;
意义不大。
group_concat()指定一个列是最好的情况。如果指定了多个列。
SELECT
`name`,
GROUP_CONCAT(course, ":", score) AS 成绩
FROM
student
GROUP BY
`name`;
那么显示结果类似这样:
group_concat(course,":",score)

mysql 列转行,合并字段的更多相关文章
- mysql 列转行,合并字段的方法
数据表(表名:xsk) +----+------+-----------+-------+ | id | name| course | score | +----+------+----------- ...
- Oracle中的列转行实现字段拼接用例
文章目录 Oracle中的列转行实现字段拼接 场景 在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件. 实现 s ...
- Mysql 列转行group_concat函数,与行转列
1.正常情况. SELECT JoinEventIds from nt_mainnum 2.使用group_concat函数 select group_concat(JoinEventIds) fro ...
- Mysql 列转行统计查询 、行转列统计查询
-- ---------------------------- -- Table structure for `TabName` -- ---------------------------- D ...
- mysql 列转行
第一种方法:使用序列化表的方法实现列转行 第一种方法:使用UNION的方法实现列转行 第二种方法:使用序列化表的方法实现列转行
- mysql列转行 行转列
列转行 SELECT flag ,substring_index(substring_index(t.context,), ) as result FROM ( select 'aa' as flag ...
- mysql 列转行 动态写法
-- 列转行动态sql -- 测试表DROP TABLE IF EXISTS `tb_score`; CREATE TABLE `tb_score` ( `id` int(11) NOT NULL A ...
- ( 转 ) Mysql group_concat 的反向应用实现(Mysql列转行)
用过Mysql的都知道她有一个很好的实现行转列功能的函数group_concat函数,非常方便 点击(此处)折叠或打开 SELECT * FROM group_test; SELECT id, GRO ...
- mysql 列转行处理
CREATE TABLE `table1` ( `id` ) DEFAULT NULL, `name` ) CHARACTER SET utf8 DEFAULT NULL ) ENGINE=MyISA ...
随机推荐
- 关于Tsung脚本无法停止的问题
最近,利用tsung测试cm的时候,脚本是这样配置的: <load> 28 <arrivalphase phase="1" duration="2&qu ...
- 一句话理解字符编码(Unicode ,UTF8,UTF16)
Unicode和ASCII码属于同一级别的,都是字符集,字符集规定从1到这个字符集的最大范围每个序号都各表示什么意思.比如ASCII字符集中序号65表示"A". 那接下来的UTF8 ...
- Spring Boot快速入门(一): Hello Spring Boot
原文地址:https://lierabbit.cn/articles/2 一.准备工作 java环境:jdk 1.8 开发工具:idea 二.创建项目 打开idea 点击Create New Proj ...
- console.log的返回值undefined
console.log(fun()); function fun(){ console.log(1); } //////输出结果为: 1 undefined console.log(fun()); ...
- mongodb 聚合查询
操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip:忽略结果的数量 $sort:按照给定的字段排序结 ...
- Python爬虫笔记(一):爬虫基本入门
最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫.这是这个项目的第一篇文章,这次就简单介绍一下Python爬虫,后面根据项 ...
- AtCoder Regular Contest 077
跟身在国外的Marathon-fan一起打的比赛,虽然最后没出F但还是涨分了. C - pushpush 题意:n次操作,每次往一个序列后面塞数,然后把整个序列翻转. #include<cstd ...
- 【Java学习笔记之十九】super在Java继承中的用法小结
1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量: 2)在一个构造函数中调用另外一 ...
- HDU 4010 Query on The Trees
Problem Description We have met so many problems on the tree, so today we will have a query problem ...
- Java学习之类的构建方法(函数)
在学习类的部分时,建立一个对象是这样建立的:(假设Person是类)Person p = new Person():我一直很费解为何new后面是一个函数形式, 今天学完构建方法后,才恍然大悟,豁然 ...