有一张表,里面有2个字段:科目,成绩
其中有3条记录分别表示语文70分,数学80分,英语58分,
科目 (subject) 成绩(grade)
语文 70
数学 80
英语 58
请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文 数学 英语
及格 优秀 不及格
------------------------------------------
思路:使用case...when....then将表中的列数据转为行(表头)构建一个虚表,再使用case...when....then根据条件替换数据
题解:
SELECT
(CASE WHEN 语文 >=80 THEN '优秀' WHEN 语文 >=60 THEN '及格' ELSE '不及格' END) AS '语文',
(CASE WHEN 数学 >=80 THEN '优秀' WHEN 数学 >=60 THEN '及格' ELSE '不及格' END) AS '数学',
(CASE WHEN 英语 >=80 THEN '优秀' WHEN 英语 >=60 THEN '及格' ELSE '不及格' END) AS '英语'
FROM
(SELECT
SUM(CASE subject WHEN '语文' THEN grade ELSE 0 END) as '语文',
SUM(CASE subject WHEN '数学' THEN grade ELSE 0 END) as '数学',
SUM(CASE subject WHEN '英语' THEN grade ELSE 0 END) as '英语'
FROM sub) as C