你在資料庫查詢時,常常需要將資料依照某個欄位分組,這時就會用到SQL群組依據。這個語法讓你可以快速統計每個分組的總數、平均或最大值,解決日常分析需求。
你在分析大量資料時,常常會遇到需要將資料依照某個欄位分類的情境。SQL群組依據就是專門為這個需求設計的語法。你可以利用GROUP BY將資料表中的資料,依照一個或多個欄位進行分組。這樣你就能針對每個分組計算總和、平均值、最大值等統計數據。
小提醒:只要你在SELECT查詢中使用了聚合函數(例如SUM、AVG、COUNT),所有沒有被聚合的欄位都必須出現在GROUP BY子句中。否則,資料庫會出現語法錯誤。
以下是SQL群組依據的基本結構:
SELECT 欄位1, 聚合函數(欄位2)
FROM 資料表
GROUP BY 欄位1
你可以參考這些常見的應用場景:
你想知道每位顧客的總消費金額,可以這樣寫:
SELECT CustomerId, SUM(Total) AS CustomerTotalSales
FROM invoices
GROUP BY CustomerId
你想計算每位顧客的訂單平均金額:
SELECT CustomerId, AVG(Total) AS CustomerAverageSales
FROM invoices
GROUP BY CustomerId
你想統計每天的訂單總銷售額:
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語法。你可以根據分組欄位、聚合結果,甚至多個欄位進行排序。
例如,你想查詢每位顧客的總消費金額,並按照金額由高到低排序:
SELECT CustomerId, SUM(Total) AS CustomerTotalSales
FROM invoices
GROUP BY CustomerId
ORDER BY CustomerTotalSales DESC
這樣你就能一目了然地看到哪位顧客消費最多。SQL群組依據搭配ORDER BY,讓你不只能分組統計,還能清楚掌握資料的排序與重點。
你可以同時依照多個欄位進行分組,這樣能讓資料分析更細緻。舉例來說,你想知道每位顧客在每一天的消費總額,可以這樣寫:
SELECT CustomerId, InvoiceDate, SUM(Total) AS DailyTotal
FROM invoices
GROUP BY CustomerId, InvoiceDate
這種多欄位SQL群組依據,適合用在需要同時考慮多個分類條件的情境。你能更精確地掌握每個分組的統計結果。
你在資料篩選時,常常會遇到WHERE和HAVING這兩個子句。WHERE會在分組前先過濾資料,適合用來排除不需要的原始資料。HAVING則是在分組後,針對分組結果進行條件過濾。這是WHERE做不到的。你可以參考以下重點:
例如,你想找出總消費金額超過1000元的顧客:
SELECT CustomerId, SUM(Total) AS CustomerTotal
FROM invoices
GROUP BY CustomerId
HAVING SUM(Total) > 1000
你在分析多張資料表時,常常會用到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語法後,可以靈活分組與統計資料。
你用GROUP BY來分組資料。你用ORDER BY來排序查詢結果。兩者功能不同,請不要混淆。
你可以這樣做,但通常沒有意義。你應該搭配SUM、COUNT等聚合函數,才能發揮GROUP BY的統計效果。
免費資源下載