聚集函数是以值的一个集合为输入,返回单个值的函数,SQL提供了五种聚集函数:
- 平均值 avg
- 最小值 min
- 最大值 max
- 总和 sum
- 计数 count
基本聚集
基本聚集查询的结果只有一行
查询工资的均值:
select avg(sal)
from emp;
查询职位为“MANAGER"的工资均值:
select avg(sal) as avg_sal
from emp
where job = 'MANAGER';
查询员工总数:
select count(*)
from emp;
分组聚集 group by
在SQL查询使用分组时,一个很重要的事情是需要保证select种没有被聚集的属性只能是出现在group by 子句中的属性。
查询每个部门的平均工资:
select deptno, avg(sal) as avg_sal
from emp
group by deptno;
having子句
having条件针对的是group by子句构成的分组
查询部门平均工资大于2000的部门的平均工资:
select deptno, avg(sal) as avg_sal
from emp
group by deptno
having avg(sal) > 2000;
对于空值的聚集
聚集函数根据以下原则处理空值:
- 除了count(*)以外的所有聚集函数都忽略输入集合的空值
- 空集的count运算为0,其他聚集函数在输入为空集时返回一个空值
以下举例说明:
1.查询总的酬金:
select sum(comm)
from emp;
结果:
2.查询部门10的总酬金:
select sum(comm)
from emp
where deptno = 10;
结果为null:
3.查询部门10具有酬金的员工数:
select count(comm)
from emp
where deptno = 10;
结果为0:
怎么读包含gruop by 与 having的查询语句:
- 根据from子句计算出一个关系
- 如果由where子句,将where子句的谓词应用在from子句得到的关系上
- 如果出现了gruop by,满足where谓词的元组通过gruop by子句形成分组
- 如果出现having子句, 它将应用到每个分组上,不满足的分组被抛弃
- select利用剩下的分组产生查询结果中的元组,即在每个分组上应用聚集函数来得到结果元组