求查询成绩表中四科成绩90分以上和一科成绩在80分到90分之间的学生学号的SQL语句

时间:2021-06-26 19:18:38
表中有三个字段,学生学号,科目,成绩。每个学生都有五门学科,查出符合四科成绩90分以上和一科成绩在80分到90分之间的学生的学号。

2 个解决方案

#1


每个学生只有五门科目,这个条件可以很大程度上简化查询
select 学号 from 表 group by 学号
having sum(case when 成绩>90 then 10 when 成绩>=80 and 成绩<=90 then 1 else 0 end)=41

#2


SELECT 学号
FROM 表名 WHERE
(CASE WHEN 科目=1 AND 成绩 >= 90 THEN 2 WHEN 科目=1 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=2 AND 成绩 >= 90 THEN 2 WHEN 科目=2 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=3 AND 成绩 >= 90 THEN 2 WHEN 科目=3 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=4 AND 成绩 >= 90 THEN 2 WHEN 科目=4 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=5 AND 成绩 >= 90 THEN 2 WHEN 科目=5 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) = 9
GROUP BY 学号

#1


每个学生只有五门科目,这个条件可以很大程度上简化查询
select 学号 from 表 group by 学号
having sum(case when 成绩>90 then 10 when 成绩>=80 and 成绩<=90 then 1 else 0 end)=41

#2


SELECT 学号
FROM 表名 WHERE
(CASE WHEN 科目=1 AND 成绩 >= 90 THEN 2 WHEN 科目=1 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=2 AND 成绩 >= 90 THEN 2 WHEN 科目=2 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=3 AND 成绩 >= 90 THEN 2 WHEN 科目=3 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=4 AND 成绩 >= 90 THEN 2 WHEN 科目=4 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) +
(CASE WHEN 科目=5 AND 成绩 >= 90 THEN 2 WHEN 科目=5 AND 成绩 < 90 AND 成绩 >= 80 THEN 1 ELSE 0 END) = 9
GROUP BY 学号