双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

学生成绩表的行列转换并显示优良中差

Code_Star Code_Star 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
数据表原内容如下:

id name subject score
----------------------------------
1 张三 语文 80
2 张三 数学 60
3 张三 英语 90
4 李四 语文 92
5 李四 数学 65
6 李四 英语 78



想要查询并显示成如下样式:

姓名 语文 数学 英语
----------------------------------
李四 92 65 78
张三 80 60 90


这个要求我用CASE-WHEN-THEN-END结构的语句实现了。语句如下:

SELECT [name] AS 姓名,
MAX( CASE subject WHEN '语文' THEN score END) AS 语文,
MAX( CASE subject WHEN '数学' THEN score END) AS 数学,
MAX( CASE subject WHEN '英语' THEN score END) AS 英语
FROM student
GROUP BY [name]



现在我现在想要查询并显示成如下结果:
(80分及以上为优,60-79为良,小于60为差)

姓名 语文 数学 英语
----------------------------------------
李四 优 良 良
张三 优 良 优

我想到的查询方法如下:


SELECT [name] AS 姓名,
MAX( CASE subject WHEN '语文' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 语文,
MAX( CASE subject WHEN '数学' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 数学,
MAX( CASE subject WHEN '英语' THEN
(CASE WHEN score>=80 THEN '优' WHEN score<80 AND score >=60 THEN '良' WHEN score<60 THEN '差' END )
END) AS 英语
FROM student
GROUP BY [name]



第一个查询语句,貌似就是这样的,但是第二个查询语句,我总感觉有点长了。大家有没有更好的方法啊?
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
Code_Star
应用实例 27,579 成员 68,540 内容