〉为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数
列如:
求出EMPLOYEES表中各部门的平均工资
select deptno, avg(sal)
from emp
group by deptno; //(按照deptno分组,求出每组的平均工资)
DEPTNO AVG(SAL)
---------- ----------
30 1566.66667
20 2175
10 2916.66667
分组使用模型:
分组函数的设计理念 SQL标准就是这么设计
正确模型:
select a, b, c
from tablename
group by a, b, c, e;
错误模型:
select a, b, c
from tablename
group by a, c, e;
过滤模型:
有关where子句和having子句都可以条件过滤
最大区别: 在where子句中不能有组函数
求10号部门的平均工资?
1、先分组 再过滤
select deptno, avg(sal)
from emp
group by deptno
having deptno = 10;
2、先过滤 再分组 (sql优化)
select deptno, avg(sal)
from emp
where deptno = 10
group by deptno;
1、先过滤
select avg(sal)
from emp
where deptno = 10;
2、后分组
select deptno,avg(sal)
from emp
where deptno = 10;
group by deptno;
下面对比一下Where、GROUP BY、HAVING的区别:
Where子句:从数据源去掉不符合搜索条件的数据;
GROUP BY子句:分组,使用统计函数(聚合函数)为每组计算统计值;
HAVING子句:在分好的组中去掉每组中不符合条件的数据行.