首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

一个小例子的有关问题

2012-03-09 
一个小例子的问题有一个学生表,里面有 学号 功课编号学生成绩三个字段.用一个SQL查询语句得出每门功课成绩

一个小例子的问题
有一个学生表,里面有 学号 功课编号
学生成绩三个字段.用一个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

热点排行