问题:
用一条sql语句获取表learn中的每科最高的两个成绩,
learn(countid,grade,id);
countid课程号,
grade成绩,
id学号,
下面是一种解决方法:
select t1.countid,t1.grade
from learn as t1
where t1.grade>=
( select max(t2.grade) from learn as t2
where t1.countid=t2.countid and t2.grade <>
( select max(t3.grade) from learn as t3
where t1.countid=t2.countid and t2.countid=t3.countid
))
group by countid , grade;
相关子查询的相关知识:
在sql语言中,一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块
的where子句或having短语的条件中的查询称为嵌套子查询。如果子查询的条件依赖于父查询这
类查询称为相关子查询,整个语句称为相关嵌套查询。
相关子查询的执行过程;
1,从外层查询中取出一个元组,将元组相关列的值传给内层查询。
2,执行内层查询,得到值来代替内层查询,得到外层查询。
3,执行外部查询。
4,然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。