sql GROUP BY 子句:數據分組與匯總
SQL 的 GROUP BY 子句用于將數據按照一列或多列的值進行分組,通常與聚合函數(如 SUM、count、AVG、MAX、MIN)結合使用,對每個分組進行計算。
GROUP BY 語法
select column1, aggregate_function(column2) FROM table_name GROUP BY column1;
GROUP BY 工作原理
- 分組:具有相同 column1 值的行被劃分到同一組。
- 聚合:對每個分組應用聚合函數,計算單個結果。
示例表:銷售數據
—
GROUP BY 使用示例
1. 按類別分組計算總銷售額
SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category;
結果:
類別 (category) | 總銷售額 (total_sales) |
---|---|
電子產品 (electronics) | 2200 |
家具 (furniture) | 350 |
—
2. 統計每個類別的產品數量
SELECT category, COUNT(product) AS product_count FROM sales GROUP BY category;
結果:
類別 (category) | 產品數量 (product_count) |
---|---|
電子產品 (electronics) | 3 |
家具 (furniture) | 2 |
—
3. 按多列分組
SELECT category, region, SUM(sales_amount) AS regional_sales FROM sales GROUP BY category, region;
結果:
類別 (category) | 地區 (region) | 地區銷售額 (regional_sales) |
---|---|---|
電子產品 (electronics) | 北部 (north) | 1700 |
電子產品 (electronics) | 南部 (south) | 500 |
家具 (furniture) | 東部 (east) | 350 |
—
GROUP BY 與 HAVING 結合使用
HAVING 子句用于在分組后過濾分組結果,與 WHERE 子句不同,WHERE 子句在分組前過濾行。
示例:過濾銷售額大于 500 的類別
SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category HAVING SUM(sales_amount) > 500;
結果:
類別 (category) | 總銷售額 (total_sales) |
---|---|
電子產品 (electronics) | 2200 |
—
GROUP BY 重要提示
- 執行順序:分組 -> 聚合 -> HAVING 過濾。
- SELECT 列:必須出現在 GROUP BY 子句中或用作聚合函數的參數。
有效查詢:
SELECT category, MAX(sales_amount) FROM sales GROUP BY category;
無效查詢:
SELECT Product, SUM(Sales_Amount) FROM sales GROUP BY Category; -- 錯誤:Product 不在 GROUP BY 中,也不是聚合函數的參數
實際應用場景
總結
GROUP BY 子句是 SQL 中強大的數據匯總工具,能有效地生成有意義的分析結果。 熟練掌握 GROUP BY 的用法對于高效的數據庫查詢至關重要。
作者:Abhay Singh Kathayat
全棧開發人員,精通前后端技術,使用多種編程語言和框架構建高效、可擴展、用戶友好的應用程序。
聯系郵箱:kaashshorts28@gmail.com