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

问题:

用一条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/archive/2008/12/07/1349642.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值