分析函式中rank(),row_number(),dense_rank()的區別

duduyey發表於2015-09-15
/*rank(),row_number(),dense_rank()的區別*/


rank() 結果中會有重複序列,並且會出現跳號
select ename,sal,rank()over(order by sal) from emp


ENAME             SAL RANK()OVER(ORDERBYSAL)
---------- ---------- ----------------------
SCOTT            3000                     12
FORD             3000                     12
KING             5000                     14

dense_rank 結果中會出現重複序列 但不會出現跳號現象

select ename,sal,dense_rank()over(order by sal) from scott.emp;

ENAME             SAL DENSE_RANK()OVER(ORDERBYSAL)
---------- ---------- ----------------------------
SCOTT            3000                           11
FORD             3000                           11
KING             5000                           12

row_number()結果不會有重複序列,重複值隨機排列,不會出現跳號

select ename,sal,row_number()over(order by sal) from scott.emp;

ENAME             SAL ROW_NUMBER()OVER(ORDERBYSAL)
---------- ---------- ----------------------------
SCOTT            3000                           12
FORD             3000                           13
KING             5000                           14

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28719055/viewspace-1800172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章