首頁 >資料庫 >mysql教程 >OLAP:多維資料集、匯總和分組集

OLAP:多維資料集、匯總和分組集

WBOY
WBOY原創
2024-07-16 15:16:421071瀏覽

OLAP: CUBE, ROLLUP, AND GROUPING SETS

在資料分析和商業智慧領域,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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn