SQL问题(面试题)

面试完后在本地mysql数据库中重现了该问题

数据表stuscore信息如下:

1、计算每个人的总成绩,并且排名(要求显示字段 学号 姓名 总成绩)
SELECT stuid AS 学号,NAME AS 姓名, SUM(score) AS 总成绩
FROM stuscore GROUP BY stuid ORDER BY 总成绩 DESC

2、计算每个人单科的最高成绩(要求显示字段 学号、姓名、课程、最高成绩)
select stuid AS 学号,NAME AS 姓名,SUBJECT AS 课程,score AS 最高成绩
from stuscore a where score=(select max(score) from stuscore where subject=a.subject)

3、统计如下:课程 不及格(0-59)个 良(60-80)个 优(81-100)个
SELECT subject AS 课程,count(CASE WHEN SCORE<60 then 1 END) AS "不及格(0-59)个",
count(CASE WHEN SCORE BETWEEN 60 AND 80 then 1 END) AS "良(81-100)个",
count(CASE WHEN SCORE BETWEEN 81 AND 100 then 1 END) AS "优(81-100)个"
FROM stuscore GROUP BY `subject`

4、统计如下:课程 张三分数 李四分数 王五分数
SELECT subject AS 课程,SUM(CASE WHEN `name` = "张三" then score ELSE 0 END) AS "张三分数",
SUM(CASE WHEN `name` = "李四" then score END) AS "李四分数",
SUM(CASE WHEN `name` = "王五" then score END) AS "王五分数"
FROM stuscore GROUP BY `subject`

原文地址:https://www.cnblogs.com/acm-bingzi/p/6509612.html