MySQL 行转列详情


当前第2页 返回上一页

  这里我们就需要case when嵌套一下了,看着高大上,其实就是普通的嵌套而已。在第一层查出分组后的各科分数,在第二层替换成等级即可。

SELECT student_name,
MAX( ?
? ? ? ? CASE subject ?
? ? ? ? WHEN '语文' THEN ?
? ? ? ? ? ? ( ?
? ? ? ? ? ? ? ? CASE ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='语文') > 20 THEN ?
? ? ? ? ? ? ? ? ? ? '优秀' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='语文') > 10 THEN ?
? ? ? ? ? ? ? ? ? ? '良好' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='语文') >= 0 THEN ?
? ? ? ? ? ? ? ? ? ? '普通' ?
? ? ? ? ? ? ? ? ELSE ?
? ? ? ? ? ? ? ? ? ? '差' ?
? ? ? ? ? ? ? ? END ?
? ? ? ? ? ? ) ?
? ? ? ? END ?
? ? ) as '语文',?
MAX( ?
? ? ? ? CASE subject ?
? ? ? ? WHEN '数学' THEN ?
? ? ? ? ? ? ( ?
? ? ? ? ? ? ? ? CASE ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='数学') > 20 THEN ?
? ? ? ? ? ? ? ? ? ? '优秀' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='数学') > 10 THEN ?
? ? ? ? ? ? ? ? ? ? '良好' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='数学') >= 0 THEN ?
? ? ? ? ? ? ? ? ? ? '普通' ?
? ? ? ? ? ? ? ? ELSE ?
? ? ? ? ? ? ? ? ? ? '差' ?
? ? ? ? ? ? ? ? END ?
? ? ? ? ? ? ) ?
? ? ? ? END ?
? ? ) as '数学',
MAX( ?
? ? ? ? CASE subject ?
? ? ? ? WHEN '英语' THEN ?
? ? ? ? ? ? ( ?
? ? ? ? ? ? ? ? CASE ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='英语') > 20 THEN ?
? ? ? ? ? ? ? ? ? ? '优秀' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='英语') > 10 THEN ?
? ? ? ? ? ? ? ? ? ? '良好' ?
? ? ? ? ? ? ? ? WHEN score - (select avg(score) from t_gaokao_score where subject='英语') >= 0 THEN ?
? ? ? ? ? ? ? ? ? ? '普通' ?
? ? ? ? ? ? ? ? ELSE ?
? ? ? ? ? ? ? ? ? ? '差' ?
? ? ? ? ? ? ? ? END ?
? ? ? ? ? ? ) ?
? ? ? ? END ?
? ? ) as '英语',
SUM(score) as '总分',
(CASE WHEN SUM(score) > 430 THEN '重点大学' ?
?? ? ?WHEN SUM(score) > 400 THEN '一本' ?
?? ? ?WHEN SUM(score) > 350 THEN '二本' ?
?? ? ?ELSE '工地搬砖'?
?? ? ?END ) as '结果'
FROM t_gaokao_score?
GROUP BY student_name?
ORDER BY SUM(score) desc;

我们来看一下输出结果:

+--------------+--------+--------+--------+--------+--------------+
| student_name | 语文 ? | 数学 ? | 英语 ? | 总分 ? | 结果 ? ? ? ? |
+--------------+--------+--------+--------+--------+--------------+
| 林磊儿 ? ? ? | 优秀 ? | 优秀 ? | 优秀 ? | ? ?445 | 重点大学 ? ? |
| 方一凡 ? ? ? | 差 ? ? | 差 ? ? | 差 ? ? | ? ?419 | 一本 ? ? ? ? |
| 乔英子 ? ? ? | 普通 ? | 差 ? ? | 优秀 ? | ? ?373 | 二本 ? ? ? ? |
| 陈哈哈 ? ? ? | 普通 ? | 普通 ? | 差 ? ? | ? ?309 | 工地搬砖 ? ? |
+--------------+--------+--------+--------+--------+--------------+
4 rows in set (0.00 sec)

过来人的经验来看,老实孩子最吃亏,早知道他娘的走艺体了~

四、结束语

  好了,SQL方面就是以上这些内容了,有疑问可以写在评论区,哈哥会在摸鱼的时候回复你~~`

附录:创建表结构&测试数据SQL

表结构:

DROP TABLE IF EXISTS `t_gaokao_score`;
CREATE TABLE `t_gaokao_score` ?(
? `id` int(0) NOT NULL AUTO_INCREMENT,
? `student_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '学生姓名',
? `subject` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科目',
? `score` double NULL DEFAULT NULL COMMENT '成绩',
? PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

导入测试数据:

INSERT INTO `t_gaokao_score` VALUES?
(1, '林磊儿', '语文', 148),
(2, '林磊儿', '数学', 150),
(3, '林磊儿', '英语', 147),
(4, '乔英子', '语文', 121),
(5, '乔英子', '数学', 106),
(6, '乔英子', '英语', 146),
(7, '方一凡', '语文', 70),
(8, '方一凡', '数学', 90),
(9, '方一凡', '英语', 59),
(10, '方一凡', '特长加分', 200),
(11, '陈哈哈', '语文', 109),
(12, '陈哈哈', '数学', 92),
(13, '陈哈哈', '英语', 80);

到此这篇关于MySQL 行转列详情的文章就介绍到这了,更多相关MySQL 行转列内容请搜索

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

mysql精讲之六:流程控制

sqlyog怎么连接mysql

mysql数据库提示连接太多怎么办

mysql如何进行解压式安装

mysql 5.7.19在centos6.5下的安装配置详解

如何查看mysql语句的运行时间

centos下配置mysql数据库自动备份

mysql的一些高级用法

mysql如何设置客户端为gbk

mysql主从复制原理是什么

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...