一个小例子的问题
有一个学生表,里面有 学号 功课编号
学生成绩三个字段.用一个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
1	3	1	100	1
2	1	1	99	2
3	4	2	88	1
4	6	2	88	1
5	9	3	100	1
6	7	3	99	2