摘要:在本教程中,您將學習如何使用 SQL CUBE 為指定的列生成所有可能的分組組合。
SQL CUBE 簡介 #
GROUP BY 子句將結果集的行按一個或多個列值分成組。
您可以對每個組應用聚合函式以返回一個聚合值,例如 SUM、AVG、MIN、MAX 和 COUNT。
CUBE 是 GROUP BY 子句的擴充套件,它允許您為指定的列生成所有可能的分組組合,包括小計和總計。
以下是帶有 CUBE 的 GROUP BY 子句的語法
SELECT
column1,
column2,
aggregate_function (column3)
FROM
table_name
GROUP BY
CUBE (column1, column2);Code language: SQL (Structured Query Language) (sql)在此語法中,我們在 CUBE 中指定了兩列。該語句建立了兩個小計組合。通常,如果您在 CUBE 中列出了 n 個列,該語句將建立 2n 個小計組合。
CUBE 運算子的工作方式如下
- 首先,為指定的列生成所有可能的分組資料組合。
- 其次,為每個列組合建立一個聚合值。
- 第三,包含一個總計行,該行聚合了所有行。
在實踐中,您會發現 CUBE 運算子對於多維分析很有幫助,例如按州和職位彙總薪資資料。
SQL CUBE 示例 #
我們將對 salary_reports 表使用 CUBE
| 州 | 職位 | 薪資 |
|---|---|---|
| 加利福尼亞 | IT | 150000.00 |
| 加利福尼亞 | 市場營銷 | 130000.00 |
| 德克薩斯 | IT | 100000.00 |
| 德克薩斯 | 市場營銷 | 80000.00 |
對單列使用 SQL CUBE #
以下查詢在 GROUP BY 子句中使用 CUBE 來計算按州分的薪資小計和所有州的總薪資
SELECT
state,
SUM(salary) AS salary
FROM
salary_reports
GROUP BY
CUBE (state)
ORDER BY
state;Code language: SQL (Structured Query Language) (sql)輸出
state | salary
------------+-----------
California | 280000.00
Texas | 180000.00
NULL | 460000.00Code language: SQL (Structured Query Language) (sql)州列中的 NULL 表示所有州的總薪資。
您可以使用 COALESCE 函式返回更有意義的標籤
SELECT
COALESCE(state, 'Total') state,
SUM(salary) AS salary
FROM
salary_reports
GROUP BY
CUBE (state)
ORDER BY
salary;Code language: SQL (Structured Query Language) (sql)輸出
state | salary
------------+-----------
Texas | 180000.00
California | 280000.00
Total | 460000.00Code language: SQL (Structured Query Language) (sql)對多列使用 SQL CUBE #
以下查詢在 GROUP BY 子句中使用 CUBE 來分析所有州和職位組合的薪資資料
SELECT
state,
job,
SUM(salary) AS salary
FROM
salary_reports
GROUP BY
CUBE (state, job);Code language: SQL (Structured Query Language) (sql)輸出
state | job | salary
------------+-----------+-----------
NULL | NULL | 460000.00
California | IT | 150000.00
Texas | Marketing | 80000.00
Texas | IT | 100000.00
California | Marketing | 130000.00
California | NULL | 280000.00
Texas | NULL | 180000.00
NULL | Marketing | 210000.00
NULL | IT | 250000.00Code language: SQL (Structured Query Language) (sql)- 總計:州和職位均為
NULL的行表示所有薪資的總和。 - 各州小計:職位列為
NULL的行表示每個州的總薪資。 - 各職位小計: 州列為
NULL的行表示每個職位的總薪資。 - 明細行:其餘行顯示每個州和職位組合的總薪資。
摘要 #
- 使用 SQL
CUBE進行多維分析。
測驗 #
資料庫 #
本教程是否有幫助?