1.

什么是聚合函数? 在数据分析过程中,我们经常需要对一组数据进行计算,求其最大值、最小值、平均值、总和和数目等,这种行为我们称之为聚合分析;而用来实现聚合分析的函数,我们称之为聚合函数。 在SQL中,常用的聚合函数有SUM(总和)、MAX(最大值),MIN(最小值),AVG(平均值)以及COUNT(计数)。 我们之前也分享过几个函数,例如IIF,INSTR等。那么,聚合函数和这些函数的不同之处是什么呢? 简单说,聚合函数是对一组数据(一列或多列)进行处理,返回单个结果;而普通函数则通常是对一组数据中的每条记录进行处理,返回的是一组结果…… 2.

举个小栗子。

access中有文本聚合函数吗 access中聚合函数是什么_SQL


上图所示,是某校学生期末考试成绩表。

语文最高分: SELECT MAX(语文) AS 语文最高分 FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_聚合函数_02


数学最低分:

SELECT MIN(数学) AS 数学最低分 FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_逻辑值_03


四舍五入后的英语平均分:

SELECT ROUND(AVG(英语),2) AS 英语平均分 FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_access中有文本聚合函数吗_04


英语、语文、数学各科成绩的分别总值:

SELECT SUM(语文) AS 语文总分,SUM(数学) AS 数学总分,SUM(英语) AS 英语总分  FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_逻辑值_05


总分最高分:

SELECT MAX(语文+数学+英语) AS 总分最高分 FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_SQL_06

3.

重点说下聚合函数COUNT(计数),这位比较有意思。 3.1 COUNT(*)和COUNT(字段)

COUNT(*)可以返回指定表的记录总行数(默认情况下不包含标题行),需要说明的重点是,对于Excel而言,它不会忽略空白行;对于数据库而言,它不会忽略整行NULL值的记录。 例如以下语句,计算结果为8,非7,计算结果包含了第5行的空白行。 SELECT COUNT(*) AS 学生人数  FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_sql中分别统计不同专业的人数_07


但当COUNT用于计算指定字段时,它会忽略Excel的空白值以及数据库的NULL。

例如以下语句,计算结果为7,忽略了第5行的空白行。 SELECT COUNT(姓名) AS 学生人数  FROM [成绩表$]

access中有文本聚合函数吗 access中聚合函数是什么_access中有文本聚合函数吗_08


小贴士:

在SQL in Excel中,尽量不要使用COUNT(*)语句,除非已进行了条件筛选,例如使用WHERE子句等。

这是因为在Excel中,SQL默认读取的是整张表格的UsedRange区域(可以简单理解成表格内已使用的单元格所构成的最大矩形区域)。

例如上例中的 SELECT * FROM [成绩表$] 读取的是已使用的单元格区域A1:E9,而并非整张表格——但当F14单元格有被使用过时,哪怕只是填充了背景色,SQL读取的区域也会演变成A1:F14…………这常常就会产生糟糕的结果……


access中有文本聚合函数吗 access中聚合函数是什么_逻辑值_09

3.2 条件计数

聚合函数搭配WHERE子句等可以实现多种条件统计。 例如以下语句可以计算语文成绩及格的人数: SELECT COUNT(*) AS 语文及格人数 FROM [成绩表$] WHERE 语文>=60

access中有文本聚合函数吗 access中聚合函数是什么_聚合函数_10


更多关于WHERE子句的应用(单条件、多条件、模糊条件等)参考前文:

Excel VBA+ADO+SQL入门教程007:如何使用SQL进行条件查询?

Excel VBA+ADO+SQL入门教程008:条件查询(下)

……

这里需要说明的是逻辑值(TRUE和FALSE)在SQL中的一种应用。

例如,以下语句可以计算三科成绩均及格的人数: SELECT COUNT(*) AS 三科均及格人数 FROM [成绩表$] WHERE 语文>=60 AND 数学>=60 AND 英语>=60

access中有文本聚合函数吗 access中聚合函数是什么_SQL_11


但上述SQL语句也可以写成:

SELECT COUNT(*) AS 三科均及格人数 FROM [成绩表$] WHERE (语文>=60)+(数学>=60)+(英语>=60)=-3

负3是什么鬼?


我们知道在EXCEL工作表函数中,当进行数学运算时,逻辑值TRUE等于1,FALSE等于0,但在SQL In Excel 中并非如此。


在SQL中,逻辑值FALSE依然等于0,但TRUE则等于-1。当三个条件均为真时,也就是-1+-1+-1,其结果必然等于-3,以此即可判断三条件是否均成立。


知道这个知识点有什么用处?

例如下面这个问题: 计算三科成绩中至少有两科及格的人数。


使用逻辑值运算技巧,如下即可:

SELECT COUNT(*) AS 至少两科及格人数 FROM [成绩表$] WHERE (语文>=60)+(数学>=60)+(英语>=60)<=-2

access中有文本聚合函数吗 access中聚合函数是什么_SQL_12

计算三科成绩中至少有两科及格的学生名单。

SELECT * FROM [成绩表$] WHERE (语文>=60)+(数学>=60)+(英语>=60)<=-2

access中有文本聚合函数吗 access中聚合函数是什么_access中有文本聚合函数吗_13


…… ……

示例文件下载百度网盘:https://pan.baidu.com/s/1PTHEZffUbHBOS9Hlqax04w

提取码:ueru

挥手致安,下期再见