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