SQL分组查询

分组查询特点:
使用group by进行分组查询;
在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:
〉被分组的列

〉为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数

列如:

求出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子句:在分好的组中去掉每组中不符合条件的数据行.


你可能感兴趣的:(sql,数据库)