一、聚集函数
1.常用的聚集函数
COUNT(*) 统计元组个数
COUNT([DISTINCT|ALL] <列名>) 统计一列中值的个数
SUM([DISTINCT|ALL] <列名>) 计算一列值的总和(此列必须是数值型)
AVG([DISTINCT|ALL] <列名>) 计算一列值的平均值(此列必须是数值型)
MAX([DISTINCT|ALL] <列名>) 求一列中的最大值
MIN([DISTINCT|ALL] <列名>) 求一列中的最小值
2.注意细节
(1)如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。如果不指定DISTINCT短语或者指定ALL短语(ALL为默认值),则表示不取消重复值。
-- eg1:查询学生总人数
SELECT COUNT(*) FROM Student;
-- eg2:查询选修了课程的学生人数
SELECT COUNT(DISTINCT Sno) FROM SC; --同一学生选修多门课有多条纪录,所以计算时需要去重
(2)当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而处理非空值。
(3)COUNT(*)是对元组进行计数,某个元组的某一个或者部分列取空值不影响COUNT的统计结果。
(4)聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句。
二、GROUP BY子句
- GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。
- 分组后聚集函数将作用于每一个组,即每个组都有一个函数值。
- 使用GROUP BY 子句后,SELECT子句的列名列表中只能出现分组属性(GROUP BY后的属性)和聚集函数。
三、WHERE子句和HAVING短语的区别
WHERE子句与HAVING短语的区别在于作用对象不同。
- WHERE子句作用于基本表或者视图,从中选择满足条件的元组。
- HAVING短语作用于组,从中选择满足条件的组。