学生成绩表的行列转换并显示优良中差
数据表原内容如下:
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结构的语句实现了。语句如下:
现在我现在想要查询并显示成如下结果:
(80分及以上为优,60-79为良,小于60为差)
姓名 语文 数学 英语
----------------------------------------
李四 优 良 良
张三 优 良 优
我想到的查询方法如下:
第一个查询语句,貌似就是这样的,但是第二个查询语句,我总感觉有点长了。大家有没有更好的方法啊?
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]
第一个查询语句,貌似就是这样的,但是第二个查询语句,我总感觉有点长了。大家有没有更好的方法啊?
...全文
相关推荐
十佳优良学风标兵申请书.docx
学风标兵的概念及重要性- **定义**:学风标兵通常指的是在学校或班级中,在学习态度、成绩表现、个人品质等方面表现出色的学生。
学生学籍管理系统SQL数据库课程的设计说明.doc
,并具备成绩查询、统计和排名功能;处理特殊状况,如留级、休学等;生成各种报表,如学生成绩表、班级信息表等;并具备数据备份和恢复机制,确保数据的安全。
学生管理系统参考模块和实例程序
表结构设计:创建如“学生表”、“课程表”、“成绩表”等,每个表包含相应的字段,如学生表包含学号、姓名等字段。2.
学生管理系统
数据库设计:使用关系型数据库(如MySQL)存储学生信息,包括基础表(如学生表、课程表、班级表)和关联表(如成绩表、出勤表、行为表)。2.
基于Springboot+Vue大学生竞赛管理系统.zip
**数据库设计**: 在这样的系统中,可能涉及到的数据库表包括用户表、竞赛表、参赛者表、报名记录表、成绩表等。


应用实例

