標籤:
內容來自: Oracle® Database SQL Language Reference 11g Release 2 (11.2) E41084-03。
empolyees表來自hr方案。
RANK函數可以計算值在特定排序中的位置(使用彙總文法)及按指定列的值計算排名(使用統計文法)。
彙總文法的火車圖:
下面語句計算了工資$2215和傭金為0.5%的員工在查詢結果中排名。
SELECT RANK(2015, .05) WITHIN GROUP(ORDER BY salary, commission_pct) "Rank"FROM employees_t;
查詢結果:
Rank---------- 1
ORDER BY:指定了排序欄位,查詢集合只有通過該子句排序,我們才可以擷取值在排序好的集合中的位置。
RANK:該函數的參數數量必須與ORDER BY欄位的數量相同。
DESC、ASC:如果不指定降序(DESC),集合將按照升序(ASC)排列,所以排名既可以按升序也可以按降序排列。
NULLS FIRST、NULLS LAST:指定NULL值在排列中放在開頭還是放在結尾,所以這會影響值排名。
統計文法的火車圖:
該文法適合查詢排名前幾位或排名後幾位的記錄
下面語句可以查詢部門60的所有員工的排名,排名按照工資由低到高:
SELECT department_id, last_name, salary,RANK() OVER (PARTITION BY department_id ORDER BY salary ) RANKFROM employees_t WHERE department_id = 60ORDER BY RANK, last_name;
查詢結果:
DEPARTMENT_ID LAST_NAME SALARY RANK------------- ------------------------- ---------- ---------- 60 Lorentz 4200.00 1 60 Austin 4800.00 2 60 Pataballa 4800.00 2 60 Ernst 6000.00 4 60 Hunold 9000.00 5
RANK:不需要指定參數。
OVER:指定排名對象。
PARTITION BY:可以分區排名,指定分區欄位。
ORDER BY:與彙總文法中的ORDER BY用法一樣。
在上面的例子中,分別對每個部分中員工進行排名,這裡僅顯示了部門60。注意,排名號可能不是連續的,如果有兩個排名第二的記錄,他們的排名號都是2,緊接著則是排名號為4的記錄。
Oracle-- (RANK) 次序函數