MICK-SQL基礎教程(第二版) 第八章 SQL高級處理

第八章 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ù)就是2^n

GROUPING SETS——取得期望的積木

該運算符可以用于從 ROLLUP 或者 CUBE 的結果中取出部分記錄。


本書完結!
別忘點贊!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容