聚集函数
输入值的一个集合,返回单个值的函数。SQL提供了五个固有聚集函数
- 平均值:
avg
- 最小值:
min
- 最大值:
max
- 总和:
sum
- 计数:
count
sum和avg输入必须是数字集
1.基本聚集
例如计算平均数,默认情况下,聚集函数保留重复元组,若删除重复元组需要显式使用select avg(distinct salary)
:
select avg(salary)
from instructor
where dept_name = 'Comp.Sci'
计算关系中元组个数
select count(*)
from course;
2.分组聚集group by
group by
子句用来构造分组,其中所有属性上取值相同的元组被分在一个组中,注意任何没有出现在group by
子句中的属性如果出现在select内部的话,它只能出现在聚集函数内部,否则就是错的。
select dept_name,avg(salary) as avg_salary
from instruct
group by dept_name;
3.having
子句
having
用于对分组限定条件,having子句中的谓词在形成分组后才起作用,因此可以使用聚集函数,如:
select dept_name,avg(salary)
from instructor
group by dept_name
having avg(salary) > 42000;
任何出现在having
子句中,但没有被聚集的属性必须出现在group by子句中,否则查询就被当成是错误的
查询子句的操作顺序:from
-> where
-> group by
-> having
-> select
4.对空值和布尔值的聚集
-
除了
count(*)
之外所有的聚集函数都忽略输入集合中的空值。 -
由于空值被忽略,可能会出现空集,规定空集的
count
运算值为0(除了count(*)
仍然会对空值进行计数),其他所有聚集运算在输入为空集的情况下返回一个空值。