oracle-----分组函数

本文详细解析了SQL中的分组函数如COUNT(), AVG(), MAX(), MIN(), SUM()的正确使用方法,强调了这些函数与GROUP BY子句的关系,并通过实例说明了如何避免常见错误。

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

[code]

group by 有时候就是为了使用下面的分组函数
count() avg() max(); // 一般针对于数字的应用上
min(); sum()

如果程序中使用了分组函数,则有两种可以使用的情况:
1。程序中存在了group by ,并制定了分组条件,这样可以将分组条件一起查询出来
2。如果不使用group by的话,则只能单独使用分组函数

所以: select deptno,count(empno) from emp; //错误:不是单组分组函数
改:select deptno,count(empno) from emp group by deptno;
select deptno,ename,count(empno)from emp group by deptno; //错误:不是一个group by表达式

总结就是: group by 和组函数都将赋予 字段组的概念,那么在这种情况下由group by 修饰的
字段和由组函数修饰的字段都是组字段,而前面的不是组字段,当然会出现错误


where group by having order by -----wgho ---我走好

要求显示出平均工资大于2000的部门编号和平均工资。
select deptno,AVG(sal)
from emp
where AVG(sal) > 2000
group by deptno ; //第三行出现错误: 此处不允许使用分组函数
分组函数只能在分组中使用,不允许在where语句之中出现,我们只能使用分组过滤

select deptno,AVG(sal)
from emp
group by deptno HAVING AVG(sal) > 2000;

显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,
并且要满足从事同一工作的雇员的月工资合计
大于$5000,输出结果按月工资的合计升序排列
emp{empno,ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptno}
dept{deptno,dname,loc}
salgrade{grade,losal,hisal}
bonus{ename,job,sal,comm}
这么长的语句:分解
显示非销售人员工作名称:
select job from emp where job <>'SALESMAN'
。。。以及从事同一工作雇员的月工资的总和,
select job,SUM(sal) from emp
where job <>'SALESMAN'
group by job
。。。并且要满足从事同一工作的雇员的月工资合计大于$5000
select job,SUM(sal) from emp
where job <>'SALESMAN'
group by job HAVING SUM(sal) > 5000
。。。输出结果按月工资的合计升序排列
select job,SUM(sal) su from emp
where job <>'SALESMAN'
group by job HAVING SUM(sal) > 5000
order by su; //使用别名不叫分组函数,可以使用

分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句
求出平均工资最高的部门工资
select deptno,MAX(AVG(sal))
from emp
group by deptno; //错误,不是单组分组函数,理解:查询的东西一个是一层组函数,一个是两层组函数,显然他们不是同一级别,当然不能一起使用

改成:select MAX(AVG(sal))
from emp
group by deptno;
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值