Oracle 資料庫開發--淺析分析函式
**
Oracle高階函式
**
聚合函式
準備資料
我們在日常的oracle開發過程中常用到的聚合函式主要包括:
count:計數函式,主要用來獲取記錄的數量。
sum:求和函式,主要的用途是對某一欄位進行彙總求和。
avg:平均數函式,他用來求平均值。
max:求最大值,獲取最大值的函式。
min:求最小值的函式。
以上列舉的是我們常用的函式,還有一些不常用的就不做贅述,比如求方差,求標準偏差。這些函式基本都會和group by 一起使用,把給出的記錄彙總成一條記錄,但是在我們的開發過程中我們有時候的需求是把資料彙總並作為一個欄位新增到每一條記錄上,一種方法是用普通函式做完彙總,然後和明細進行關聯把彙總資料新增到每一條記錄,還有就是我們有時候並不是需要把所有的記錄進行彙總,而是以某一條記錄作為基準,按照一定的規則去統計,比如排序完後對每一條記錄的前1條到後一條進行統計,針對以上的場景我們的普通函式就不能滿足我們的需求了,這時候高階的分析函式恰好能應用到我們的實際場景中,以sum作為例子來演示
sum(統計欄位) over(partition by 分組欄位) 分組後組內的全部記錄之和
sum(統計欄位) over(partition by 分組欄位 order by 排序欄位) 分組排序後 對前面所有行包括當前行在內的記錄進行統計
sum(統計欄位) over(partition by 分組欄位 order by 排序欄位 rows between m PRECEDING and n FOLLOWING ) 分組排序後 對當前行的前m行,後n行,包括本行進行記錄統計,如果是統計到最後就把n用unbounded 代替
通過上面的實力可以很清晰的看出,分析函式使用更加靈活多變,能滿足和適應更多的場景。
常用的分析函式
lag(1,2,3)over(partition by order by )
引數1代表 列
引數2代表該列的當前行向上找幾行
引數3預設值,如果沒有預設為空
lead(1,2,3)over(partition by order by )
引數1代表 列
引數2代表該列的當前行向下找幾行
引數3預設值,如果沒有預設為空
rank () over()
排序1,2,2,4
dense_rank()over()
排序1,2,2,3
row_number()over()
排序1,2,3,4
重點:
sql語句order by 和over(order by )先後順序
如果sql語句有order by,開窗函式中也有order by ,先是計算開窗函式,最後才計算sql中的排序.,sql中的order by 不會影響開窗函式結果,