获取各科最高两个成绩的解决方案。

问题:

用一条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,直到外层的元组全部处理完毕。

原文地址:https://www.cnblogs.com/xingyayang/p/1349642.html