第八章 SQL高級處理
窗口函數(shù)
窗口函數(shù)也稱為 OLAP函數(shù) 。OLAP 是 OnLine Analytical Processing 的簡稱,意思是對數(shù)據(jù)庫數(shù)據(jù) 進行實時分析處理。例如,市場分析、創(chuàng)建財務報表、創(chuàng)建計劃等日常性
商務工作。 窗口函數(shù)就是為了實現(xiàn) OLAP 而添加的標準 SQL 功能 。
窗口函數(shù)大體可以分為以下兩種。
- 能夠作為窗口函數(shù)的聚合函數(shù)(SUM、AVG、COUNT、MAX、MIN)
- RANK、DENSE_RANK、ROW_NUMBER 等專用窗口函數(shù)
窗口函數(shù)的語法
<窗口函數(shù)> OVER ([PARTITION BY <列清單>] ORDER BY <排序用列清單>)
PARTITION BY 能夠設定排序的對象范圍。通過 PARTITION BY 分組后的記錄集合稱為窗口。此處的窗口并 非“窗戶”的意思,而是代表范圍。
ORDER BY 能夠指定按照哪一列、何種順序進行排序.
無需指定PARTITION BY
專用窗口函數(shù)的種類
- RANK函數(shù)
計算排序時,如果存在相同位次的記錄,則會跳過之后的位次。
例:有 3 條記錄排在第 1 位時:1 位、1 位、1 位、4 位…… - DENSE_RANK函數(shù) 同樣是計算排序,即使存在相同位次的記錄,也不會跳過之后的位次。
例:有 3 條記錄排在第 1 位時:1 位、1 位、1 位、2 位…… - ROW_NUMBER函數(shù) 賦予唯一的連續(xù)位次。
例:有 3 條記錄排在第 1 位時:1 位、2 位、3 位、4 位……
窗口函數(shù)的適用范圍
原則上窗口函數(shù)只能在SELECT子句中使用。
計算移動平均
窗口函數(shù)就是將表以窗口為單位進行分割,并在其中進行排序的函數(shù)。其實其中還包含在窗口中指定更加詳細的匯總范圍的備選功能,該備選功能中的匯總范圍稱為框架.
ROWS(“行”)
PRECEDING(“之前”)
FOLLOWING(“之后”)
ROWS 2 PRECEDING “截止到之前 2 行”,也就是將作為匯總對象的記錄限 定為如下的“最靠近的 3行”。
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
兩個ORDER BY
OVER 子句中的 ORDER BY 只是用來決定 窗口函數(shù)按照什么樣的順序進行計算的,對結果的排列順序并沒有影響。
GROUPING運算符
GROUPING 運算符包含以下3種:
- ROLLUP
- CUBE
- GROUPING SETS
ROLLUP——同時得出合計和小計
SELECT product_type, SUM(sale_price) AS sum_price FROM Product
GROUP BY ROLLUP(product_type);
使用GROUPING函數(shù)能夠簡單地分辨出原始數(shù)據(jù)中的NULL和超級分組記錄中的NULL。
CUBE——用數(shù)據(jù)來搭積木
所謂 CUBE,就是將 GROUP BY 子句中聚合鍵的“所有可能的組合” 的匯總結果集中到一個結果中。因此,組合的個數(shù)就是
GROUPING SETS——取得期望的積木
該運算符可以用于從 ROLLUP 或者 CUBE 的結果中取出部分記錄。
本書完結!
別忘點贊!