当前位置: 代码迷 >> Oracle开发 >> 一个SQL写法,每个班级成绩排名前十的学生
  详细解决方案

一个SQL写法,每个班级成绩排名前十的学生

热度:44   发布时间:2016-04-24 06:33:52.0
一个SQL写法,每个班级成绩排名前10的学生。
老调重弹的SQL写法,最近很少写代码,一时间忘记了。求助
------解决思路----------------------
引用:
这个注意,不能使用 row_number() 应该使用 rank() 。避免有两个第 10 名的情况,丢掉其中一个。
如果LZ 有时间的, 可以研究一下 dense_rank , rank , row_number 的区别。


SELECT * FROM (
select T.*,RANK() OVER(PARTITION BY 班级 order by 成绩 desc) RN
FROM T
)WHERE RN<=10

++
楼主,排名用rank,dese_rank吧

with table_name(id,sc)as(
select 1,90 from dual
union all
select 2,90 from dual
union all
select 3,90 from dual
union all
select 4,77 from dual
)
SELECT id, sc, rank() over(ORDER BY sc DESC) rk, dense_rank() over(ORDER BY sc DESC) drk
  FROM table_name;

--结果
        ID         SC         RK        DRK
---------- ---------- ---------- ----------
         1         90          1          1
         2         90          1          1
         3         90          1          1
         4         77          4          2
--通过这组数据可以看出相同排名后是否跳名次区别而已。