Oracle子句【group by、having】

本文详细解析了SQL中的分组(group by)和筛选(having)功能,通过具体实例展示了如何利用这些功能进行数据聚合与高级筛选。文章强调了分组后使用多行函数的重要性,并对比了where与having在筛选过程中的不同作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【分组查询】
关键字:group by 分组字段名,分组字段名...
 --注意1:分组后,在select语句中只允许出现分组字段和多行函数
 --注意2:如果是多字段分组,先按第一字段分组,然后每个小组继续按照第二个字段分组,以此类推。
 --注意3:在where子句中不允许出现多行函数(where子句比多行函数级别高)
【分组筛选】
关键字:having
 --作用:针对分组后数据进行筛选,允许使用多行函数。
 --注意1 :having必须和分组关键字结合使用,不允许单独使用。
注意:where 和 having 比较:
 --1.where子句不允许出现多行函数,having允许出现多行函数。
 --2.where子句和having都可以使用普通字段直接进行筛选,但是where的效率高于having。
where执行顺序: from-->where-->group by-->select-->order by
having执行顺序:from-->group by-->select-->having-->order by
小结:在分组语句中:使用where进行字段级别的筛选,使用having进行多行函数筛选。

举栗子:

 1 --查询不同部门的最高工资
 2 select deptno,max(sal) from emp group by deptno;
 3 --查询不同工作岗位的员工数
 4 select job,count(*) from emp group by job;
 5 --查询不同部门的不同工作岗位的人数
 6 select deptno,job,count(*) from emp group by deptno,job order by deptno;
 7 --查询不同部门的不同工作岗位的并且人数大于1的信息
 8 select deptno,job,count(*) from emp group by deptno,job having count(*)>1 order by deptno;
 9 --查询部门号大于10的不同部门的不同工作岗位的人数
10 select deptno,job,count(*) from emp group by deptno,job having deptno>10 order by deptno;
11 select deptno,job,count(*) from emp where deptno>10 group by deptno,job order by deptno;--执行效率高

 

转载于:https://www.cnblogs.com/cao-yin/p/9740052.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值