我想从我已完成的记录中搜索前5名薪水,但我想要另一列包含这些薪水的编号序列,例如谁在第一位,谁在第二位等等
答案 0 :(得分:1)
分析函数,例如RANK(或DENSE_RANK或ROW_NUMBER)可能有所帮助。
SQL> select ename, sal,
2 rank() over (order by sal desc) rnk1,
3 dense_rank() over (order by sal desc) rnk2,
4 row_number() over (order by sal desc) rnk3
5 from emp
6 order by sal desc;
ENAME SAL RNK1 RNK2 RNK3
---------- ---------- ---------- ---------- ----------
KING 5000 1 1 1
SCOTT 3000 2 2 2
FORD 3000 2 2 3
JONES 2975 4 3 4
BLAKE 2850 5 4 5
CLARK 2450 6 5 6
ALLEN 1600 7 6 7
TURNER 1500 8 7 8
MILLER 1300 9 8 9
MARTIN 1250 10 9 10
WARD 1250 10 9 11
ADAMS 1100 12 10 12
JAMES 950 13 11 13
SMITH 800 14 12 14
14 rows selected.
SQL>