SQL每日一题09:最值问题

111 阅读1分钟

题目

用一条SQL 语句 查询出每门课都大于80 分的学生姓名,表格样式及数据如下:

结果为:

参考答案

create table T20191110
(
name varchar(20),
course varchar(20),
score int
)
insert into T20191110 values('张三','语文',81);
insert into T20191110 values('张三','数学',75);
insert into T20191110 values('李四','语文',76);
insert into T20191110 values('李四','数学',90);
insert into T20191110 values('王五','语文',81);
insert into T20191110 values('王五','数学',100);
insert into T20191110 values('王五','英语',90);

--MySQL和SQL Server解法
--方法一:
select name from T20191110 
group by name having min(score) > 80;
--方法二:
select distinct name from T20191110 
where name not in(
select distinct name from T20191110 
where score <=80
);

答案解析

解法一是通过找到每个学生的分数的最小值,当最小值都比80分大,那么就是该学生的所有课程分数都比80大

解法二是先找到有课程分数小于等于80分的学生,然后通过 NOT IN 来排除这些学生,同样可以达到题目的要求。