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