日期:2014-05-17  浏览次数:20827 次

求select语句
有一个学生分数表
id       course      score
100    语文         80
100    数学         85
100    英语         90
101    语文         60
101    数学         70
101    英语         100
102    语文         100
102    数学         90
102    英语         90
...
求排序,
要求:每个学生的最高两门课程,如果分数相同,则全部写出。
结果
id       course      score
100    英语         90
100    数学         85 
101    英语         100
101    数学         70
102    语文         100
102    数学         90
102    英语         90


------解决方案--------------------
引用:
在线等啊求救

WITH tt AS(
SELECT 100 ID,'语文' course,80 score FROM dual UNION ALL
SELECT 100,'数学',85 FROM dual UNION ALL
SELECT 100,'英语',90 FROM dual UNION ALL
SELECT 101,'语文',60 FROM dual UNION ALL
SELECT 101,'数学',70 FROM dual UNION ALL
SELECT 101,'英语',100 FROM dual UNION ALL
SELECT 102,'语文',100 FROM dual UNION ALL
SELECT 102,'数学',90 FROM dual UNION ALL
SELECT 102,'英语',90 FROM dual )
SELECT ID,COURSE, SCORE
  FROM (SELECT ID,
               COURSE,
               SCORE,
               RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM
          FROM TT)
 WHERE MM <= 2

------解决方案--------------------
DENSE_RANK()
------解决方案--------------------
引用:
Quote: 引用:

DENSE_RANK()


能详细点吗?

SELECT ID,COURSE, SCORE   FROM (SELECT ID,                COURSE,                SCORE,                RA