需要按薪水排名以下,最高薪水排名为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
答案 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来解析分析函数。