處理數據的人都知道,對數據進行分組可能很麻煩。如果您正在使用電子表格或其他工具來對各種數據進行分組,請閱讀本教程并學習如何使用SQL更輕松地完成工作。我們將致力于營銷樣本數據。您是否曾經遇到過需要分析數據并以不同于存儲數據的形式呈現結果的情況?在本教程中,您將了解在對SQL中的數據進行分組時,SQL對有效的數據操作有多大幫助。
問題
情境
您在全球范圍內的數字有影響力營銷機構工作。該機構在世界各地都有分支機構,CMO已決定進行促銷計劃活動。該計劃是在每個地點舉辦一個論壇,有許多影響者參加。
每個有影響力的人都有一個經理,經理在活動期間照顧有影響力的人,提供信息并處理解決方案。一位經理一次只能照顧一位影響者。擁有不只一位影響者的管理者將必須聘請一名活動助理。
已要求您提供以下信息:
每個位置的影響者數量(以確定事件的規模)
每個位置的每個經理的影響者數量(以檢查必須招聘多少活動助理)
此信息內部存儲在代理商的SQL數據庫中,該數據庫包含一個表格,其中包含有關影響者的數據。
您的工作是分析存儲在影響者表中的數據,并將所需信息提供給CMO。
樣本數據表
下表命名為 influencer 并包含您將在整個教程中使用的示例數據。
為了以圖形方式顯示分組過程,您必須按位置和impacter_manager對樣本數據進行排序。的influencer 表數據將用作解釋SQL中數據分組過程的起點。
讓我們從以下查詢開始:
SELECT *
FROM influencer
ORDER BY location, influencer_manager
現在 influencer 表格看起來像這樣:
如您所見,表中的數據按升序排序,首先是按位置,然后是有影響力的經理。
解
什么是SQL GROUP BY子句?
CMO定義的任務都需要數據分組。在SQL中,數據分組使用GROUP BY 條款。
SQL GROUP BY允許您根據定義的條件對數據進行分組。您可以按一個或多個表列對單個數據進行分組。要正確進行分組,您通常需要將匯總函數應用于“SELECT 聲明。
GROUP BY子句的語法
的語法 GROUP BY 子句如下:
SELECT count(column_name1), column_name2, column_name3, ... ,
FROM table_name
WHERE condition
GROUP BY column_name2, column_name3, ... ,
ORDER BY column_name2, column_name3, ... ,
在語法方面,請務必記住GROUP BY子句在SELECT語句中的位置。始終在FROM和/或WHERE子句之后和ORDER BY子句之前如果存在編寫GROUP BY語句。
如您所見,要使用 GROUP BY子句,您需要了解SQL查詢數據的基礎。如果您想重新學習這些基礎知識,請看一些在線課程。
有很多Internet資源可以學習SQL,例如Udemy,Coursera和edX,但是它們通常缺乏交互性,對于初學者來說可能太過挑戰。
我建議您從一開始就可以獲得實踐代碼編寫經驗的站點,例如Vertabelo Academy的SQL Basics。
您會驚訝于通過練習可以進步多快!
如果您已經熟悉基本的寫作 SELECT語句,學習如何在SQL中對數據進行分組將是小菜一碟。讓我們看看如何GROUP BY 在實踐中可行!
SQL GROUP BY示例
現在該解決場景中提出的任務了。首先,您必須編寫一個基本的GROUP BY查詢。之后,您將通過一個稍微復雜的示例來查看如何對多個表列進行分組。
任務1:獲取每個位置的影響者數量
查詢:
SELECT location, count(location) as number_of_influencers
FROM influencer
GROUP BY location
ORDER BY location
讓我們仔細看看構建以上查詢的過程:
1.選擇位置列。我們將使用此列將您的數據分組。
SELECT location
FROM influencer
2.通過將COUNT函數應用到表列之一中,將另一列添加到SELECT語句中,以獲取影響者數量。
由于使用COUNT函數對表行進行計數,因此將其應用于哪個表列都沒有關系。
SELECT location, count(location) as number_of_influencers
FROM influencer
3.如果沒有GROUP BY子句,則先前的查詢將不起作用,因為它包含聚合函數。因此,插入GROUP BY子句,然后使用location列進行分組。
由于該列包含五個不同的值,因此最終查詢結果將具有五行。
SELECT location, count(location) as number_of_influencers
FROM influencer
GROUP BY location
下表顯示了如何進行分組:根據位置列中的不同值對數據進行分組,其中每個繪制的矩形均包含特定位置的數據。換句話說,每個矩形代表一個數據組。
COUNT函數將計算每個組中的行數,并返回某個位置中有影響力的人數。
4.應用 ORDER BY 位置列上的子句可根據該列中的值以升序對最終查詢結果進行排序。
SELECT location, count(location) as number_of_influencers
FROM influencer
GROUP BY location
ORDER BY location
查詢結果:
任務2:獲取每個地點每個經理的影響者數量
讓我們驗證一下經理是否必須為該論壇雇用助手。
查詢:
SELECT influencer_manager, location, count(influencer_name) as number_of_influencers
FROM influencer
GROUP BY influencer_manager, location,
ORDER BY influencer_manager
現在,我們將仔細研究構建以上查詢的過程:
1.SELECT 的 influencer_manager 和 location列; 您將使用這些列將數據分組。
SELECT influencer_manager, location,
FROM influencer
2.與前面的示例一樣,通過將COUNT函數應用于表列之一來向SELECT語句添加另一列(以獲取每個管理者的影響者數)。
SELECT influencer_manager, location, count(influencer_name) as number_of_influencers
FROM influencer
3.同樣,如果沒有GROUP BY子句,則上一步中的查詢將不起作用,因為它包含聚合函數。現在,您應該將GROUP BY子句同時應用于Impactr_manager和location列。
因此,首先,您需要按經理對數據進行分組。接下來,您可以按位置對這些經理進行分組,從而有效地在位置組中創建經理子組。
SELECT influencer_manager, location, count(influencer_name) as number_of_influencers
FROM influencer
GROUP BY influencer_manager, location
的 COUNT 函數將計算每個組的子組中的行,并返回每個位置的每個管理員的影響者數量。
4.在influencer_manager列上應用ORDER BY子句,以按經理的姓名升序對查詢結果進行排序。
SELECT influencer_manager, location, count(influencer_manager) as number_of_influencers
FROM influencer
GROUP BY influencer_manager, location
ORDER BY influencer_manager
查詢結果:
如您所見,有些經理擁有不只一名本地影響者,有些經理則擁有來自世界各地的影響者。
有了這些知識,我們現在可以例如為必須決定只參加一個活動地點的招聘經理助理或現場經理計劃預算。想了解更多關于SQL數據庫的信息,請繼續關注中培偉業。