mysql之行转列与列转行
mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现。
行转列
行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作,看着更直观,一目了然。

建表语句:
CREATE TABLE `st_grade` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`course` varchar(20) DEFAULT NULL,
`score` float(4,1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO `st_grade` VALUES ('', '张三', '语文', '86.0');
INSERT INTO `st_grade` VALUES ('', '张三', '数学', '90.0');
INSERT INTO `st_grade` VALUES ('', '张三', '英语', '75.0');
INSERT INTO `st_grade` VALUES ('', '李四', '语文', '92.0');
INSERT INTO `st_grade` VALUES ('', '李四', '数学', '93.0');
INSERT INTO `st_grade` VALUES ('', '李四', '英语', '96.0');
INSERT INTO `st_grade` VALUES ('', '王五', '语文', '82.0');
INSERT INTO `st_grade` VALUES ('', '王五', '数学', '71.0');
INSERT INTO `st_grade` VALUES ('', '王五', '英语', '74.0');
查询语句:
select stu_name ,
max(case course when '语文' then score else 0 end ) 语文,
max(case course when '数学' then score else 0 end ) 数学,
max(case course when '英语' then score else 0 end ) 英语
from st_grade
group by stu_name;
列转行
列转行的话,就是将一条列数据转换为一条一条的行数据记录展示,将某一行数据根据某些列进行分组操作。

建表语句:
CREATE TABLE `st_grade` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`course` varchar(20) DEFAULT NULL,
`score` float(4,1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
插入语句:
INSERT INTO `st_grade` VALUES ('', '张三', '语文', '86.0');
INSERT INTO `st_grade` VALUES ('', '张三', '数学', '90.0');
INSERT INTO `st_grade` VALUES ('', '张三', '英语', '75.0');
INSERT INTO `st_grade` VALUES ('', '李四', '语文', '92.0');
INSERT INTO `st_grade` VALUES ('', '李四', '数学', '93.0');
INSERT INTO `st_grade` VALUES ('', '李四', '英语', '96.0');
INSERT INTO `st_grade` VALUES ('', '王五', '语文', '82.0');
INSERT INTO `st_grade` VALUES ('', '王五', '数学', '71.0');
INSERT INTO `st_grade` VALUES ('', '王五', '英语', '74.0');
查询语句:
select stu_name, '语文' course , cn_score as score
from st_grade2
union select stu_name, '数学' course, math_score as score from st_grade2
union select stu_name, '英语' course, en_score as score from st_grade2
order by stu_name,course;
以上代码可以直接复制来验证,没有错误。
mysql之行转列与列转行的更多相关文章
- mysql 多行(GROUP_CONCAT)和多列(CONCAT)的合并函数
1,多行合并:把查询的一行或者多行进行合并. SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id ...
- mysql行转列,列转行
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...
- SQL行转列与列转行(转)
原文: http://blog.csdn.net/jx_870915876/article/details/52403472 add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关 ...
- 关于MySQL的行转列的简单应用(二)---group函数
MySQL的行转列.列转行.连接字符串 concat.concat_ws.group_concat函数用法使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一 ...
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
- MYSQL 多行转多列
mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行),我觉得这都是一个意思 数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一 ...
- oracle 行转列、列转行
最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle 列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- SQLServer处理行转列和列转行
掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 ...
随机推荐
- 你真的了解foreach吗?
引言 有C#基础的,当问到循环有哪些,会毫不犹豫的说出的for.do while.foreach及while这几种,但是到具体实际开发中,我们遇到一些问题,比如:到底选择哪种?为什么选择这种?哪种好像 ...
- Docker部署Mysql集群
单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...
- 错误 找不到Xcode No such file or directory
- Bean中要使用配置文件中的值,使用set方法注入
/** * Sensors Analytics Bean * @author Feng */ @Component public class SensorsAnalyticsBean { /*** * ...
- pikachu 暴力破解
一 暴力破解 1.基于表单的暴力破解 先随意测试root/root登录,用Burp抓包,丢进Intruder 添加username和password两个参数变量,攻击类型选择Clusterbomb 有 ...
- nginx部署安装
首先需要下载Nginx软件包 nginx软件官方下载地址:[nginx官方下载连接](http://www.nginx.org) 建议选择稳定的软件版本,如果练习使用当然是无所谓,随便什么版本都可以, ...
- 关于TC297的Flash写入之前是否需要先擦除的问题
通过实际测试,对TC297 Flash的一个地址空间可以重复执行写入操作(program),而不需要先对该区域所在扇区进行擦除. MPC5675K则需要在写入之前进行擦除.
- MongoDB第三天(正则,管道,聚合,字符串,算术,日期,java连接MongoDB)
部分正则表达式: i:忽略大小写 m:多行查找 x:设置 x 选项后,正则表达式中的非转义的空白字符将被忽略. s:允许点字符(即.)匹配包括换行符在内的所有字符. w:匹配包括下划线的任何单词字 ...
- Java的值类型和引用类型
一.问题描述 前几天因为一个需求出现了Bug.说高级点也挺高级,说白点也很简单.其实也就是一个很简单的Java基础入门时候的值类型和引用类型的区别.只是开发的时候由于自己的问题,导致小问题的出现.还好 ...
- Elasticsearch logstash filter
参照官方文档: https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html demo-pipeline.conf i ...