sql GROUP BY 子句:數(shù)據(jù)分組與匯總
SQL 的 GROUP BY 子句用于將數(shù)據(jù)按照一列或多列的值進行分組,通常與聚合函數(shù)(如 SUM、count、AVG、MAX、MIN)結(jié)合使用,對每個分組進行計算。
GROUP BY 語法
select column1, aggregate_function(column2) FROM table_name GROUP BY column1;
GROUP BY 工作原理
- 分組:具有相同 column1 值的行被劃分到同一組。
- 聚合:對每個分組應(yīng)用聚合函數(shù),計算單個結(jié)果。
示例表:銷售數(shù)據(jù)
產(chǎn)品 (product) | 類別 (category) | 銷售額 (sales_amount) | 地區(qū) (region) |
---|---|---|---|
筆記本電腦 (laptop) | 電子產(chǎn)品 (electronics) | 1000 | 北部 (north) |
手機 (phone) | 電子產(chǎn)品 (electronics) | 500 | 南部 (south) |
電視 (tv) | 電子產(chǎn)品 (electronics) | 700 | 北部 (north) |
辦公桌 (desk) | 家具 (furniture) | 200 | 東部 (east) |
椅子 (chair) | 家具 (furniture) | 150 | 東部 (east) |
—
GROUP BY 使用示例
1. 按類別分組計算總銷售額
SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category;
結(jié)果:
類別 (category) | 總銷售額 (total_sales) |
---|---|
電子產(chǎn)品 (electronics) | 2200 |
家具 (furniture) | 350 |
—
2. 統(tǒng)計每個類別的產(chǎn)品數(shù)量
SELECT category, COUNT(product) AS product_count FROM sales GROUP BY category;
結(jié)果:
類別 (category) | 產(chǎn)品數(shù)量 (product_count) |
---|---|
電子產(chǎn)品 (electronics) | 3 |
家具 (furniture) | 2 |
—
3. 按多列分組
SELECT category, region, SUM(sales_amount) AS regional_sales FROM sales GROUP BY category, region;
結(jié)果:
類別 (category) | 地區(qū) (region) | 地區(qū)銷售額 (regional_sales) |
---|---|---|
電子產(chǎn)品 (electronics) | 北部 (north) | 1700 |
電子產(chǎn)品 (electronics) | 南部 (south) | 500 |
家具 (furniture) | 東部 (east) | 350 |
—
GROUP BY 與 HAVING 結(jié)合使用
HAVING 子句用于在分組后過濾分組結(jié)果,與 WHERE 子句不同,WHERE 子句在分組前過濾行。
示例:過濾銷售額大于 500 的類別
SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category HAVING SUM(sales_amount) > 500;
結(jié)果:
類別 (category) | 總銷售額 (total_sales) |
---|---|
電子產(chǎn)品 (electronics) | 2200 |
—
GROUP BY 重要提示
- 執(zhí)行順序:分組 -> 聚合 -> HAVING 過濾。
- SELECT 列:必須出現(xiàn)在 GROUP BY 子句中或用作聚合函數(shù)的參數(shù)。
有效查詢:
SELECT category, MAX(sales_amount) FROM sales GROUP BY category;
無效查詢:
SELECT Product, SUM(Sales_Amount) FROM sales GROUP BY Category; -- 錯誤:Product 不在 GROUP BY 中,也不是聚合函數(shù)的參數(shù)
實際應(yīng)用場景
- 銷售報表:計算每個產(chǎn)品或地區(qū)的總銷售額。
- 庫存管理:計算每個類別的商品數(shù)量。
- 數(shù)據(jù)分析:按類別、日期或位置計算平均值或總和。
總結(jié)
GROUP BY 子句是 SQL 中強大的數(shù)據(jù)匯總工具,能有效地生成有意義的分析結(jié)果。 熟練掌握 GROUP BY 的用法對于高效的數(shù)據(jù)庫查詢至關(guān)重要。
作者:Abhay Singh Kathayat
全棧開發(fā)人員,精通前后端技術(shù),使用多種編程語言和框架構(gòu)建高效、可擴展、用戶友好的應(yīng)用程序。
聯(lián)系郵箱:kaashshorts28@gmail.com