题目一:
table:成绩单
不使用union查找出前3名的男生和女生分数
sql:select top 10 分数 from 成绩单 group by 性别 order by 分数;(错误!)
更正:(2011-09-07)
select a.* from grades a where 3>(select count(*) from grades where gender=a.gender and grade>a.grade ) order by a.gender, a.grade desc;
查询结果:
题目二:
table:成绩单
姓名 | 课程 | 分数 |
张三 | 语文 | 85 |
李四 | 英语 | 95 |
张三 | 数学 | 70 |
。。。 | 。。。 | 。。。 |
选择所有课程都过了80分的学生姓名
sql:select distinct(姓名) from 成绩单 where 姓名 not in (select disntinct(姓名) from 成绩单 where 分数<=80)
以下两种方法均来自:http://lj-zhu.iteye.com/blog/644799
方法一:
select name from test.stu
group by name
having min(score)>=80
方法二:
select name from test.stu
group by name
having count(score) =sum(case when
score>80 then 1 else 0 end )