什麼是SQL GROUP BY語法與基本用法全解析

作者:帆軟行業化團隊

2025年7月07日 · 8 min read

來源:帆軟
sql group by

你在資料庫查詢時,常常需要將資料依照某個欄位分組,這時就會用到SQL群組依據。這個語法讓你可以快速統計每個分組的總數、平均或最大值,解決日常分析需求。

核心要點

  • SQL GROUP BY語法能將資料依欄位分組,搭配SUM、AVG、COUNT等聚合函數快速統計每組資料的總和、平均或筆數。
  • HAVING子句可用來篩選分組後的結果,讓你針對統計數據設定條件,提升查詢的彈性與精準度。
  • GROUP BY可與ORDER BY和JOIN搭配使用,讓你排序分組結果並跨多張資料表進行彙總分析,滿足更複雜的資料需求。

GROUP BY語法

GROUP BY語法
GROUP BY 語法

SQL群組依據

你在分析大量資料時,常常會遇到需要將資料依照某個欄位分類的情境。SQL群組依據就是專門為這個需求設計的語法。你可以利用GROUP BY將資料表中的資料,依照一個或多個欄位進行分組。這樣你就能針對每個分組計算總和、平均值、最大值等統計數據。

小提醒:只要你在SELECT查詢中使用了聚合函數(例如SUM、AVG、COUNT),所有沒有被聚合的欄位都必須出現在GROUP BY子句中。否則,資料庫會出現語法錯誤。

以下是SQL群組依據的基本結構:

SELECT 欄位1, 聚合函數(欄位2)
FROM 資料表
GROUP BY 欄位1

你可以參考這些常見的應用場景:

  1. 你想知道每位顧客的總消費金額,可以這樣寫:

    SELECT CustomerId, SUM(Total) AS CustomerTotalSales
    FROM invoices
    GROUP BY CustomerId
    
  2. 你想計算每位顧客的訂單平均金額:

    SELECT CustomerId, AVG(Total) AS CustomerAverageSales
    FROM invoices
    GROUP BY CustomerId
    
  3. 你想統計每天的訂單總銷售額:

    SELECT InvoiceDate, SUM(Total) AS DayTotalSales
    FROM invoices
    GROUP BY InvoiceDate
    

這些例子都展現了SQL群組依據在日常資料分析中的強大功能。你可以像在Excel做樞紐分析一樣,快速彙總與分類資料。

聚合函數應用

當你使用SQL群組依據時,聚合函數是不可或缺的好幫手。你可以用SUM計算總和,用AVG計算平均值,用COUNT計算筆數,也可以用MAX或MIN找出最大或最小值。這些函數讓你能針對每個分組進行彙總與分析。

舉個例子,假設你想知道每位顧客的訂單數量,可以這樣寫:

SELECT CustomerId, COUNT(*) AS OrderCount
FROM invoices
GROUP BY CustomerId

你也可以同時使用多個聚合函數。例如,計算每位顧客的訂單總數與平均金額:

SELECT CustomerId, COUNT(*) AS OrderCount, AVG(Total) AS AverageOrder
FROM invoices
GROUP BY CustomerId

這些查詢都離不開SQL群組依據的核心概念。你只要掌握聚合函數的用法,就能靈活運用GROUP BY解決各種統計需求。

ORDER BY排序

你查詢分組結果時,常常會希望結果按照某個欄位排序。這時可以搭配ORDER BY語法。你可以根據分組欄位、聚合結果,甚至多個欄位進行排序。

例如,你想查詢每位顧客的總消費金額,並按照金額由高到低排序:

SELECT CustomerId, SUM(Total) AS CustomerTotalSales
FROM invoices
GROUP BY CustomerId
ORDER BY CustomerTotalSales DESC

這樣你就能一目了然地看到哪位顧客消費最多。SQL群組依據搭配ORDER BY,讓你不只能分組統計,還能清楚掌握資料的排序與重點。

進階應用

多欄位SQL群組依據

你可以同時依照多個欄位進行分組,這樣能讓資料分析更細緻。舉例來說,你想知道每位顧客在每一天的消費總額,可以這樣寫:

SELECT CustomerId, InvoiceDate, SUM(Total) AS DailyTotal
FROM invoices
GROUP BY CustomerId, InvoiceDate

這種多欄位SQL群組依據,適合用在需要同時考慮多個分類條件的情境。你能更精確地掌握每個分組的統計結果。

HAVING與WHERE

你在資料篩選時,常常會遇到WHERE和HAVING這兩個子句。WHERE會在分組前先過濾資料,適合用來排除不需要的原始資料。HAVING則是在分組後,針對分組結果進行條件過濾。這是WHERE做不到的。你可以參考以下重點:

  • HAVING用於分組後的結果篩選,能針對聚合函數結果(如SUM、AVG)設定條件。
  • WHERE只能在分組前過濾資料,無法處理聚合後的統計資料。
  • HAVING會在檢索出所有記錄後才進行過濾,適合用來篩選統計結果。
  • 在GROUP BY之前使用WHERE能提升查詢效率,減少不必要的分組。
  • HAVING讓你能針對分組後的統計資料進行篩選,這對資料分析非常重要。

例如,你想找出總消費金額超過1000元的顧客:

SELECT CustomerId, SUM(Total) AS CustomerTotal
FROM invoices
GROUP BY CustomerId
HAVING SUM(Total) > 1000

GROUP BY與JOIN

你在分析多張資料表時,常常會用到JOIN搭配SQL群組依據。這樣可以先合併資料,再進行分組統計。例如,你想知道每個國家的顧客總消費金額,可以這樣寫:

SELECT c.Country, SUM(i.Total) AS CountryTotal
FROM customers c
JOIN invoices i ON c.CustomerId = i.CustomerId
GROUP BY c.Country

這種寫法讓你能跨表分析,快速得到每個國家的消費總額。你可以根據實際需求,靈活運用JOIN與GROUP BY,完成更複雜的資料彙總。

 

你學會GROUP BY語法後,可以靈活分組與統計資料。

  • 你能用SUM、AVG等聚合函數快速分析分組特徵
  • HAVING子句讓你篩選分組結果,提升查詢彈性
  • 禁止排序能加快查詢速度
    請多練習GROUP BY,並正確搭配HAVING、ORDER BY語法,讓資料分析更有效率!

FAQ

GROUP BY和ORDER BY有什麼不同?

你用GROUP BY來分組資料。你用ORDER BY來排序查詢結果。兩者功能不同,請不要混淆。

可以在沒有聚合函數時使用GROUP BY嗎?

你可以這樣做,但通常沒有意義。你應該搭配SUM、COUNT等聚合函數,才能發揮GROUP BY的統計效果。

GROUP BY可以和HAVING一起用嗎?

  • 你可以同時使用GROUP BY和HAVING。
  • HAVING讓你篩選分組後的結果,這對資料分析很重要。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容