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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值