读书人

一个小例子的有关问题

发布时间: 2012-03-09 16:54:57 作者: rapoo

一个小例子的问题
有一个学生表,里面有 学号 功课编号
学生成绩三个字段.用一个SQL查询语句得出每门功课成绩最好的前两名

学号 功课编号 学生成绩
1 1 99
2 1 98
3 1 100
4 2 88
5 2 87
6 2 88
7 3 99
8 3 88
9 3 100


SELECT 学生表1.*
FROM 学生表 学生表1 WHERE 学生表1.学号 IN
(SELECT TOP 2 学生表.学号
FROM 学生表
WHERE 学生表.功课编号 = 学生表1.功课编号
ORDER BY 学生成绩 DESC)


我就是想不明白,为什么要用自连接,学生表.功课编号 = 学生表1.功课编号,本来不就是相等么??

[解决办法]
楼上的不错的.
另wren4255 注意:
要的前两名中如果有分数一样,怎样取.
一种是用dense_rank() 如上例子中取两名时实际是三个人,另一种可以用Rank.

select *
from (select cn,
kn,
score,
rank() over(partition by kn order by score desc) num
from t)
where num <= 2;


--结果-------------------
SEQ CN KN Score Num
1311001
211992
342881
462881
5931001
673992

读书人网 >oracle

热点推荐