1分析函數
分析函數根據一組行來進行聚合計算,用於計算完成狙擊的累積排名等,分析函數為每組記錄返回多個行
rank_number()
查詢結果按照次序排列,不存在並列和站位的情況,可以用於做Oracle的分頁
例如:SELECT tname,sal,row_number() OVER(ORDER BY sal DESC) 降序 FROM teacher;
查詢結果如圖:
rank()
排序結果如有並列成績,則並列成績就會占取下一順序的位置,下一個成績則會跳過下一序號排列
例如:SELECT tname,sal,RANK() OVER(PARTITION BY deptno ORDER BY sal) 降序 FROM teacher;
dense_rank()
查詢的排序結果如果有相同成績,則相同的成績名次並列但不占下一個名次的位置,查詢的結果還是順序的
例如:SELECT tname,sal,dense_rank() OVER(PARTITION BY deptno ORDER BY sal DESC) 降序 FROM teacher;
2.聚合函數
聚合函數是基於一組數據來返回結果,返回的結果只有一個值
常用聚合函數有avg() max() sum() min() count(0);
--老師工資平均數
SELECT AVG(sal) FROM teacher;
--老師工資總數
SELECT SUM(sal) FROM teacher;
--老師總數
SELECT COUNT(0) FROM teacher;
注:面對大量數據時count(0)的處理效率要明顯高於count(*)
--老師工資最大值
SELECT MAX(sal) FROM teacher;
-老師工資最小值
SELECT MIN(sal) FROM teacher;-
--查詢各部門的編號,最高工資,最低工資,工資總數,平均工資,並按照部門的工資總數降序排列
SELECT deptno,MAX(sal),MIN(sal),SUM(sal),AVG(sal) FROM teacher GROUP BY deptno ORDER BY SUM(sal);