聚合函数(aggregation function)对一组值执行计算,并返回单个值。除了 COUNT(*) 外,聚合函数都会忽略 NULL 值。
| 函数 | 功能 |
|---|---|
COUNT() | 统计数量 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
SUM() | 求和 |
注意:
SUM和AVG的输入必须是数字集,但其他运算符还可作用在非数字数据类型的集合上
通用语法:
SELECT<aggregation_function>(<column_name>)FROM<table_name>;
COUNT() 函数用于确定表中行的数目或符合特定条件的行的数目。
使用方式:
COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL 值语法:
-- 包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,包含 NULL 的记录,且不去重COUNT(*)-- 第一列,1 表示固定值,可以是 COUNT(2)、COUNT(3),在统计结果的时候,包含 NULL 的记录COUNT(1)-- 只包裹列名指定列,返回指定列的非空的记录数,在统计结果的时候,不包含为 NULL 的记录COUNT(<column_name)-- 只包括列名指定列,返回指定列的不同值的记录数,即会去重,且不包含列值为 NULL 的记录COUNT(distinct <column_name)
🌰 示例:统计该企业员工数量
SELECTCOUNT(*) AS num_employeeFROMemployee;
🌰 示例:获取有电子邮件地址的员工总数
SELECTCOUNT(email) AS num_employee_with_emailFROMemployee;
有些情况下在计算聚合函数前需先删除重复元组。如果我们确实想删除重复元组,可在聚合表达式中使用关键字 DISTINCT(适合用于查整张表的总数)。
🌰 示例:找出 25 岁以上姓氏为 zhang 的员工总数
SELECTCOUNT(distinct name)FROMemployeeWHEREname like 'zhang%' age > 25;
由于在 name 前有关键字 DISTINCT,所以即使有姓氏为 zhang(无论是 张、章 等)的员工,在结果中他也仅被计数一次。
注意:
- SQL 不允许在用
COUNT(*)时使用DISTINCT。在用MAX和MIN时使用DISTINCT是合法的,尽管结果无差别。我门可以使用关键字ALL替代DISTINCT来说明保留重复元组。
🌰 示例:通过 AVG() 函数返回 mock_exam 模拟考表中所有学生数学成绩的平均分
SELECTAVG(maths_score) AS avg_mathsFROMstudnets;-- 输出+-----------+| avg_maths |+-----------+| 82 |+-----------+
该查询的结果是一个具有单属性的关系,其中只包含一个元组,这个元组的数值对应模拟考学生的数学成绩。数据库系统可以给结果关系的属性一个任意名字,该属性是由聚合产生的,可以通过 AS 子句给属性赋予有意义的名称。
注意事项:
AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数AVG()函数忽略列值为NULL的行
MAX() 用于返回指定列的最大值。
🌰 示例:获取身高最高的学生身高
SELECTMAX(height) AS max_heightFROMstudents;
该函数通常用于数值或日期,如果用于字符串比较,则返回排序后的最后一行。
MIN() 用于返回指定列的最小值。
🌰 示例:获取体重最轻的学生体重
SELECTMIN(weight) AS min_weightFROMstudents;
该函数通常用于数值或日期,如果用于字符串比较,则返回排序后的第一行。
SUM() 函数用于返回指定列值的和(总计)。
🌰 示例:获取班级献爱心活动中共筹款的总数
SELECTSUM(charity_fund) AS total_charity_fundFROMstudnets;
🌰 示例:获取班级献爱心活动中女生筹款的总数
SELECTSUM(charity_fund) AS total_charity_fundFROMstudnetsWHEREgender = 2;
ALL 参数或不指定参数(因为 ALL 是默认行为)DISTINCT 参数注意事项:
DISTINCT,则假定为 ALLCOUNT(*):如果指定列名,则 DISTINCT 只能用于 COUNT()。DISTINCT 不能用于 COUNT(*)。类似地,DISTINCT 必须使用列名,不能用于计算或表达式🌰 示例:根据多个聚集函数统计
SELECTCOUNT(*) AS height,MIN(height) AS height_min,MAX(height) AS height_max,AVG(height) AS height_avgFROMstudents;
注意: