走在風(fēng)中今天陽(yáng)光 突然好溫柔 天的溫柔地的溫柔 像你抱著我 …… 1. 什么是聚合函數(shù)? 在數(shù)據(jù)分析過程中,我們經(jīng)常需要對(duì)一組數(shù)據(jù)進(jìn)行計(jì)算,求其最大值、最小值、平均值、總和和數(shù)目等,,這種行為我們稱之為聚合分析;而用來實(shí)現(xiàn)聚合分析的函數(shù),,我們稱之為聚合函數(shù),。 在SQL中,常用的聚合函數(shù)有SUM(總和),、MAX(最大值),,MIN(最小值),AVG(平均值)以及COUNT(計(jì)數(shù)),。 我們之前也分享過幾個(gè)函數(shù),,例如IIF,INSTR等。那么,,聚合函數(shù)和這些函數(shù)的不同之處是什么呢,? 簡(jiǎn)單說,聚合函數(shù)是對(duì)一組數(shù)據(jù)(一列或多列)進(jìn)行處理,,返回單個(gè)結(jié)果,;而普通函數(shù)則通常是對(duì)一組數(shù)據(jù)中的每條記錄進(jìn)行處理,返回的是一組結(jié)果…… 2. 舉個(gè)小栗子,。 上圖所示,,是某校學(xué)生期末考試成績(jī)表。 語文最高分: SELECT MAX(語文) AS 語文最高分 FROM [成績(jī)表$] 數(shù)學(xué)最低分: SELECT MIN(數(shù)學(xué)) AS 數(shù)學(xué)最低分 FROM [成績(jī)表$] 四舍五入后的英語平均分: SELECT ROUND(AVG(英語),2) AS 英語平均分 FROM [成績(jī)表$] 英語,、語文,、數(shù)學(xué)各科成績(jī)的分別總值: SELECT SUM(語文) AS 語文總分,SUM(數(shù)學(xué)) AS 數(shù)學(xué)總分,SUM(英語) AS 英語總分 FROM [成績(jī)表$] 總分最高分: SELECT MAX(語文 數(shù)學(xué) 英語) AS 總分最高分 FROM [成績(jī)表$] 3. 重點(diǎn)說下聚合函數(shù)COUNT(計(jì)數(shù)),這位比較有意思,。 COUNT(*)和COUNT(字段) COUNT(*)可以返回指定表的記錄總行數(shù)(默認(rèn)情況下不包含標(biāo)題行),,需要說明的重點(diǎn)是,對(duì)于Excel而言,,它不會(huì)忽略空白行,;對(duì)于數(shù)據(jù)庫(kù)而言,它不會(huì)忽略整行NULL值的記錄,。 例如以下語句,計(jì)算結(jié)果為8,,非7,,計(jì)算結(jié)果包含了第5行的空白行。 SELECT COUNT(*) AS 學(xué)生人數(shù) FROM [成績(jī)表$] 但當(dāng)COUNT用于計(jì)算指定字段時(shí),,它會(huì)忽略Excel的空白值以及數(shù)據(jù)庫(kù)的NULL,。 例如以下語句,計(jì)算結(jié)果為7,,忽略了第5行的空白行,。 SELECT COUNT(姓名) AS 學(xué)生人數(shù) FROM [成績(jī)表$] 小貼士: 在SQL in Excel中,盡量不要使用COUNT(*)語句,,除非已進(jìn)行了條件篩選,,例如使用WHERE子句等。 這是因?yàn)樵贓xcel中,,SQL默認(rèn)讀取的是整張表格的UsedRange區(qū)域(可以簡(jiǎn)單理解成表格內(nèi)已使用的單元格所構(gòu)成的最大矩形區(qū)域),。例如上例中的 SELECT * FROM [成績(jī)表$] 讀取的是已使用的單元格區(qū)域A1:E9,而并非整張表格——但當(dāng)F14單元格有被使用過時(shí),,哪怕只是填充了背景色,,SQL讀取的區(qū)域也會(huì)演變成A1:F14…………這常常就會(huì)產(chǎn)生糟糕的結(jié)果…… 條件計(jì)數(shù) 聚合函數(shù)搭配WHERE子句等可以實(shí)現(xiàn)多種條件統(tǒng)計(jì)。 例如以下語句可以計(jì)算語文成績(jī)及格的人數(shù): SELECT COUNT(*) AS 語文及格人數(shù) FROM [成績(jī)表$] WHERE 語文>=60 更多關(guān)于WHERE子句的應(yīng)用(單條件、多條件,、模糊條件等)參考前文: Excel VBA ADO SQL入門教程007:條件查詢(上) Excel VBA ADO SQL入門教程008:條件查詢(下) …… 這里需要說明的是邏輯值(TRUE和FALSE)在SQL中的一種應(yīng)用,。 例如,以下語句可以計(jì)算三科成績(jī)均及格的人數(shù): SELECT COUNT(*) AS 三科均及格人數(shù) FROM [成績(jī)表$] WHERE 語文>=60 AND 數(shù)學(xué)>=60 AND 英語>=60 但上述SQL語句也可以寫成: SELECT COUNT(*) AS 三科均及格人數(shù) FROM [成績(jī)表$] WHERE (語文>=60) (數(shù)學(xué)>=60) (英語>=60)=-3 負(fù)3是什么鬼,? 我們知道在EXCEL中,,當(dāng)進(jìn)行數(shù)學(xué)運(yùn)算時(shí),邏輯值TRUE等于1,,F(xiàn)ALSE等于0,,但在SQL In Excel 中并非如此。 在SQL中,,邏輯值FALSE依然等于0,,但TRUE則等于-1。當(dāng)三個(gè)條件均為真時(shí),,也就是-1 -1 -1,,其結(jié)果必然等于-3,以此即可判斷三條件是否均成立,。 知道這個(gè)知識(shí)點(diǎn)有什么用處,? 例如下面這個(gè)問題: 計(jì)算三科成績(jī)中至少有兩科及格的人數(shù)。 使用邏輯值運(yùn)算技巧,,如下即可: SELECT COUNT(*) AS 至少兩科及格人數(shù) FROM [成績(jī)表$] WHERE (語文>=60) (數(shù)學(xué)>=60) (英語>=60)<=-2 計(jì)算三科成績(jī)中至少有兩科及格的學(xué)生名單,。 SELECT * FROM [成績(jī)表$] WHERE (語文>=60) (數(shù)學(xué)>=60) (英語>=60)<=-2 …… …… 圖文作者:看見星光 |
|