複製鏈接
請複製以下鏈接發送給好友

分析函數

鎖定
oracle數據庫函數,分析函數用於為行定義一個窗口,它對一組值進行操作,不需要使用GROUP BY子句對數據進行分組,能夠在同一行中同時返回基礎行的列和聚合列。
中文名
分析函數
外文名
Analysis Function
適用領域
數據

分析函數分析函數的作用

在SQL語句中,很多查詢語句需要進行GROUP BY分組彙總,但是一旦經過分組,SELECT返回的記錄數就會減少。為了保留所有原始行記錄,並且仍可以進行分組數據分析,分析函數應運而生。
分析函數與聚合函數計算方式一樣,分析函數也是對行集組進行聚合計算,但是它不像普通聚合函數那樣每組只返回一個值,分析函數可以為每組返回多個值。
分析函數的語法為:over(partition by 列名1 order by 列名2 ),括號中的兩個關鍵詞partition by 和order by 可以只出現一個。over() 前面是一個函數,如果是聚合函數,那麼order by 不能一起使用。

分析函數分析函數的分類

1.排名分析函數
ROW_NUMBER、DENSE_RANK、RANK屬於排名函數。
排名分析函數可以單獨使用ORDER BY 語句,也可以和PARTITION BY同時使用。
PARTITION BY用於將結果集進行分組。
ORDER BY 指定排名分析函數的順序,在排名分析函數中必須使用ORDER BY語句。
ROW_NUMBER 為每一組的行按順序生成一個連續序號。
RANK()也為每一組的行生成一個序號,與ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值會生成相同的序號,並且接下來的序號是不連序的。例如兩個相同的行生成序號3,那麼接下來會生成序號5。
DENSE_RANK()和RANK()類似,不同的是如果有相同的序號,那麼接下來的序號不會間斷。也就是説如果兩個相同的行生成序號3,那麼接下來生成的序號還是4。
2.聚合分析函數
很多聚合函數都可以用作分析函數的運算,如SUM、AVG、MAX、MIN、COUNT
聚合分析函數只能使用PARTITION BY子句,ORDER BY不能與聚合分析函數一同使用。