如何在Oracle中产生排名

时间:2010-07-31 19:42:36

标签: sql oracle oracle10g analytic-functions top-n

需要按薪水排名以下,最高薪水排名为1.

显示的RANK列就是我追求的目标:

Empname        sal      address           RANK
----------------------------------------------
Ram            3411     45,east road      2
Anirban        2311     34,west wind      4
Sagor          10000    34,south          1
Manisha        3111     12,d.h road       3

3 个答案:

答案 0 :(得分:3)

Oracle10g意味着您可以使用像ROW_NUMBER这样的分析/排名/窗口函数:

SELECT t.empname,
       t.sal,
       t.address,
       ROW_NUMBER() OVER (ORDER BY t.sal DESC) AS RANK
  FROM TABLE t

对于迂腐的人,如果你想看到关系获得相同的等级值,请将ROW_NUMBER替换为DENSE_RANK

  

如果两名员工的薪水相同,RANK职能将为两名员工返回相同的职级。 但是,这会导致排名差距(即:非连续排名)。这与生成连续排名的dense_rank函数完全不同。

旧学校的排名方式是使用:

SELECT t.empname,
       t.sal,
       t.address,
       (SELECT COUNT(*)
          FROM TABLE x 
         WHERE x.sal <= t.sal) AS RANK
  FROM TABLE t

输出将与DENSE_RANK输出匹配 - tie将具有相同的rank值,同时连续编号。

答案 1 :(得分:1)

查看排名 - 样本here

答案 2 :(得分:1)

我经常参考这个详细,信息丰富但又快速的链接Analytical Functions来解析分析函数。