输入值的一个集合,返回单个值的函数。SQL提供了五个固有聚集函数
avg
min
max
sum
count
例如计算平均数,默认情况下,聚集函数保留重复元组,若删除重复元组需要显式使用select avg(distinct salary)
:
select avg(salary) from instructor where dept_name = 'Comp.Sci'
计算关系中元组个数
select count(*) from course;
group by
group by
子句用来构造分组,其中所有属性上取值相同的元组被分在一个组中,注意任何没有出现在group by
子句中的属性如果出现在select内部的话,它只能出现在聚集函数内部,否则就是错的。
select dept_name,avg(salary) as avg_salary from instruct group by dept_name;
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
除了count(*)
之外所有的聚集函数都忽略输入集合中的空值。
由于空值被忽略,可能会出现空集,规定空集的count
运算值为0(除了count(*)
仍然会对空值进行计数),其他所有聚集运算在输入为空集的情况下返回一个空值。