首页 > 数据库技术 > 详细

mysql之行转列与列转行

时间:2019-10-17 17:29:05      阅读:74      评论:0      收藏:0      [点我收藏+]

mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现。

 

 

行转列

行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作,看着更直观,一目了然。

  技术分享图片

建表语句:

1 CREATE TABLE `st_grade` (
2   `id` int(10) NOT NULL AUTO_INCREMENT,
3   `stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
4   `course` varchar(20) DEFAULT NULL,
5   `score` float(4,1) DEFAULT NULL,
6   PRIMARY KEY (`id`)
7 ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

 

插入数据:

1 INSERT INTO `st_grade` VALUES (1, 张三, 语文, 86.0);
2 INSERT INTO `st_grade` VALUES (2, 张三, 数学, 90.0);
3 INSERT INTO `st_grade` VALUES (3, 张三, 英语, 75.0);
4 INSERT INTO `st_grade` VALUES (4, 李四, 语文, 92.0);
5 INSERT INTO `st_grade` VALUES (5, 李四, 数学, 93.0);
6 INSERT INTO `st_grade` VALUES (6, 李四, 英语, 96.0);
7 INSERT INTO `st_grade` VALUES (7, 王五, 语文, 82.0);
8 INSERT INTO `st_grade` VALUES (8, 王五, 数学, 71.0);
9 INSERT INTO `st_grade` VALUES (9, 王五, 英语, 74.0);

 

查询语句:

1 select stu_name ,
2   max(case course when 语文 then score else 0 end ) 语文,
3   max(case course when 数学 then score else 0 end ) 数学,
4   max(case course when 英语 then score else 0 end ) 英语
5 from st_grade
6 group by stu_name;

 

列转行


列转行的话,就是将一条列数据转换为一条一条的行数据记录展示,将某一行数据根据某些列进行分组操作。

技术分享图片

 

 建表语句:

1 CREATE TABLE `st_grade` (
2   `id` int(10) NOT NULL AUTO_INCREMENT,
3   `stu_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
4   `course` varchar(20) DEFAULT NULL,
5   `score` float(4,1) DEFAULT NULL,
6   PRIMARY KEY (`id`)
7 ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

 

插入语句:

1 INSERT INTO `st_grade` VALUES (1, 张三, 语文, 86.0);
2 INSERT INTO `st_grade` VALUES (2, 张三, 数学, 90.0);
3 INSERT INTO `st_grade` VALUES (3, 张三, 英语, 75.0);
4 INSERT INTO `st_grade` VALUES (4, 李四, 语文, 92.0);
5 INSERT INTO `st_grade` VALUES (5, 李四, 数学, 93.0);
6 INSERT INTO `st_grade` VALUES (6, 李四, 英语, 96.0);
7 INSERT INTO `st_grade` VALUES (7, 王五, 语文, 82.0);
8 INSERT INTO `st_grade` VALUES (8, 王五, 数学, 71.0);
9 INSERT INTO `st_grade` VALUES (9, 王五, 英语, 74.0);

 

查询语句:

1 select stu_name, 语文 course , cn_score as score 
2     from st_grade2
3     union select stu_name, 数学 course, math_score as score from st_grade2
4     union select stu_name, 英语 course, en_score as score from st_grade2
5 order by stu_name,course;

 

以上代码可以直接复制来验证,没有错误。

 

mysql之行转列与列转行

原文:https://www.cnblogs.com/ailanlan/p/11692999.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!