Oracle第三天学习(group by)

本文介绍了如何使用SQL中的group by和having子句进行数据分组及筛选操作,包括查询各部门平均薪水的方法,并解决了常见错误。

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

1
[u][i][b]group by[/b][/i][/u]

查询各个[b]部门[/b]的[b]平均薪水[/b]

select avg(sal) from emp group by deptno;


将部门[b]编号[/b]和[b]部门平均薪水[/b]一起查出来

select deptno,avg(sal) from emp group by deptno;


好了,现在我想将[b]部门名字[/b]和[b]平均薪水[/b]一起查出来,这么做可以吗?

select d.dname,avg(e.sal) 平均薪水 from dept d,emp e
where d.deptno = e.deptno
group by d.deptno;

这么做是查不出结果来的。而且会报这么个错误
不是 GROUP BY 表达式

为什么呢?
因为这时候其实是按照[b]部门名称[/b]分组的
所以group by的时候添加一个部门名称就可以查出来了

select d.dname,avg(e.sal) 平均薪水 from dept d,emp e
where d.deptno = e.deptno
group by d.deptno,d.dname;


2
[b][i][u]having[/u][/i][/b]
现在,我想查询[b]平均工资[/b]在[b]2000元以上[/b]的部门,怎么查呢?

select deptno,avg(sal) from emp
where avg(sal) > 2000
group by deptno;

显示以下错误:
ERROR 位于第 1 行:
ORA-00934: 此处不允许使用分组函数


那么该如何写呢?这时候就需要用到 [b]having[/b]关键词来替代[b]where[/b]了
having过滤的是 [b]组条件[/b],而 where 过滤的是[b]单行条件[/b]。

select deptno,avg(sal) from emp
group by deptno
having avg(sal) > 2000;

这么写才能得出 [b]平均薪水[/b] [b]大于 2000[/b] 的部门
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值