3

需要按薪水排名,最高薪水排名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
4

3 回答 3

4

Oracle10g 意味着您可以使用分析/排名/加窗函数,例如 ROW_NUMBER:

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

对于迂腐的人,如果您想看到领带获得相同的排名值,请替换ROW_NUMBERDENSE_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 输出——平局将具有相同的排名值,同时连续编号。

于 2010-07-31T20:00:05.007 回答
1

看看 rank-samples在这里

于 2010-07-31T19:46:01.417 回答
1

对于分析函数,我经常参考这个详细、信息丰富且快速的链接Analytical Functions

于 2010-12-24T01:03:07.033 回答