在資料分析和商業智慧領域,OLAP(線上分析處理)是一項基石技術,可促進對海量資料集的多維分析。 OLAP 使用戶能夠透過多個維度分析資料來獲得洞察,從而提供業務指標和績效的全面視圖。
現在我們將討論 OLAP 的三個關鍵特性,即 CUBE、ROLLUP 和 GROUPING SETS 運算子。這將在以各種方式匯總和聚合數據方面發揮關鍵作用。
我們先討論第一個:
立方體是OLAP中的強大工具,它可以產生維度及其聚合的所有可能組合。它透過計算每個維度組合的小計和總計,提供全面的多維資料視圖,使用戶能夠從不同的角度和粒度層級探索資料。
好吧,這首先有點技術性,但當我們在查詢中使用它時,您肯定會理解它。
假設我們想知道在一個國家/地區租房的每個人的數量以及他們的性別。
SELECT country, gender, COUNT(*) FROM rentals GROUP BY CUBE(country, gender) -- This one will group them by its country and gender.
所以輸出會是這樣的
| country | gender | COUNT(*) | |------------|----------|----------| | USA | Male | 100 | | USA | Female | 150 | | UK | Male | 120 | | UK | Female | 130 | | NULL | Male | 220 | <-- Subtotal for Male across all countries | NULL | Female | 280 | <-- Subtotal for Female across all countries | USA | NULL | 250 | <-- Subtotal for USA across all genders | UK | NULL | 250 | <-- Subtotal for UK across all genders | NULL | NULL | 500 | <-- Grand total
看到每一行代表「國家」和「性別」的獨特組合。這就是 CUBE 的用途,它將根據您聚合的內容產生所有可能的組合。我們有每個類別的小計和總計。
ROLLUP 運算子用於產生分層匯總資料。它計算預定義維度層次結構的小計,通常從最詳細的粒度等級移動到最不詳細的粒度等級。它為層次結構的每個層級產生小計,產生一個結果集,其中包括指定列的每個組合的小計以及總計。它就像更多的組織然後讓我們再舉一個例子。
SELECT country, gender, COUNT(*) AS rental_count FROM rentals GROUP BY ROLLUP (country, gender);
那麼輸出會是這樣的
| country | gender | rental_count | |----------|---------|--------------| | NULL | NULL | 8 | <-- Grand total | NULL | Male | 3 | <-- Subtotal for Male across all countries | NULL | Female | 5 | <-- Subtotal for Female across all countries | USA | NULL | 3 | <-- Subtotal for USA across all genders | USA | Male | 2 | | USA | Female | 1 | | UK | NULL | 3 | <-- Subtotal for UK across all genders | UK | Male | 1 | | UK | Female | 2 |
您會在每個類別的計數之後看到它的組織,它將列印該類別的小計,然後接下來將是總計。您可能會注意到,每個類別的小計通常顯示在對應類別行的旁邊。這是因為 ROLLUP 運算子旨在提供直覺且可讀的輸出,將小計放在它們匯總的資料附近。
我們使用 GROUPING SETS 運算子根據我們放入相似分組中的參數對分組進行分組,但不同之處在於我們可以在其中放入盡可能多的組,例如
GROUP BY GROUPING SET ((國家、性別)、(國家)、(性別)) 我們可以在第一個參數中將資料分組為國家和性別的組合,在第二個參數中我們也希望僅將其分組為國家,因此第三個參數。
這就像我們在 1 個查詢中組合 3 個群組,第一個是(國家/地區,性別),然後第二個是(國家/地區),然後第三個是(性別)。因此,如果您想在不使用分組集的情況下獲得相同的結果,則需要 3 個查詢。
讓我們繼續看這個分組集的範例,以便我們能夠理解它。
SELECT country, gender, COUNT(*) AS rental_count FROM rentals GROUP BY GROUPING SETS (country, gender, ());
那麼輸出將是
| country | gender | rental_count | |----------|---------|--------------| | NULL | NULL | 8 | <-- Grand total | NULL | Male | 3 | <-- Subtotal for Male across all countries | NULL | Female | 5 | <-- Subtotal for Female across all countries | USA | NULL | 3 | <-- Subtotal for USA across all genders | USA | Male | 2 | | USA | Female | 1 | | UK | NULL | 3 | <-- Subtotal for UK across all genders | UK | Male | 1 | | UK | Female | 2 |
因此,這裡的解釋是表中顯示的國家/地區和性別的每個獨特組合,然後您想知道為什麼有() 那麼這是一個空括號,意味著它將總計中的所有計數輸出,但如果我們刪除它,它將只顯示每個類別的小計。
您想知道為什麼多維資料集和分組集具有相似性,那麼您是對的,但是多維資料集獲得了所有可能的組合,但分組集是我們可以在一個查詢中對任意數量的分組進行分組。
我知道有很多東西需要學習,但是如果您在查詢中不斷使用它,您就會理解其中的每一個。非常感謝:)
以上是OLAP:多維資料集、匯總和分組集的詳細內容。更多資訊請關注PHP中文網其他相關文章!