sqlserver查询(三)——group by 与 having的使用

        

目录

10. group by(分组)

11. having(对分组后的信息过滤)


 可能从这里开始,执行顺序越来越显得重要了!!!

10. group by(分组)

        ·这个查询相比前面会有一些困难; 

        格式:group by 字段的集合;

        功能:把表中的记录按照字段分成不同好的组;

        注意: group by a , b , c ;先按 a 分组,在 a 相同的情况下,再按 b 分组,在 b  相同的情况的情况下,再按 c 分组,最后统计的是最小分组的信息; 

                组的整体信息:经过 “统计” 操作而得到的信息 ;

                组的详细信息:比如直接输出的某个字段;

--group by 之后只出现分组后的整体信息,不能出现组内整体信息;
select deptno ,avg(sal) as "部门平均工资"--表示输出编号分别为10,20,30数据的平均数
    from emp 
    group by deptno;


select deptno,avg(sal) as "部门平均工资",ename--报错,ename的数据前面输出三行,而ename输出14行;
    from emp 
    group by deptno; --group by 之后只出现分组后的整体信息,不能出现组内整体信息;


select deptno,job ,avg(sal) as "平均工资"--okok
    from emp
    group by deptno ,job
    order by deptno,job;


select deptno ,job,avg(sal) as "平均工资",count(*)as"部门人数",--集合函数都可以使用
    sum(deptno)"总数",max(sal)as"最大值",min(sal)as"最小值"

--集合函数操作的都是最小分组信息


    from emp
    group by deptno,job
    order by deptno,job; 

11. having(对分组后的信息过滤)

(前面学习的聚合函数功能为将多行记录返回一个值,用于统计分组的信息)

--having(对分组后的数据过滤,一般会先使用group by;倘若没有出现group by,则默认having把整张表当作一组进行过滤
select max(sal)as"最高工资" from emp;
--输出【平均工资大于2000的】部门平均工资
select deptno,avg(sal)as"平均工资" from emp group by deptno having avg(sal)>2000;
select deptno,avg(sal)as"平均工资" from emp group by deptno;--分组查询编号为10,20,30的部门的平均工资
select deptno,avg(sal) as "平均工资" from emp group by deptno having count(*)>5;--分组查询员工个数大于5的部门的平均工资

--把姓名不包含A的员工按部门编号分组,统计输出部门平均工资大于2000的部门
--where必须写在having的前面,顺序不可颠倒;
select deptno,avg(sal),count(*)from emp 
        where ename not like '%A%'--对原始的数据过滤,必须放在前面
        group by deptno
        having avg(sal)>2000;--对分组后的数据过滤
        select * from emp;


        select deptno,avg(sal) from emp -----------------------------error
        group by deptno
        having avg(sal)>2000
        where ename not like '%A%';

--倘若没有出现 group by,只出现 having,则默认 having 把整张表当作一组进行过滤(很少用)
--where和having一样,都不允许出现字段的别名;

select deptno,avg(sal) as "平均工资" from emp group by deptno having "平均工资">2000--不可以使用别名,与执行顺序有关
select ename as "部门" from emp where ename not like '%A%';

        学完group by 和 having 感觉到麻木,无助,痛苦!

        希望大家多多留言,指导一下数据库的学习新的和学习经历,感谢啦。

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值