Oracle |
您所在的位置:网站首页 › Oracle分组求和 › Oracle |
上一篇👉:Oracle-----统计函数&分组统计(group by) 总目录👉震惊!史上最菜的Oracle 11g教程(大佬勿进) 文章目录 1、多表查询与分组统计(重点)1.1 范例1:查询出每个部门的名称、部门人数、平均工资1.2 范例2:查询每个部门的编号、名称、位置、部门人数、平均工资 2、having 子句2.1 范例1:错误的代码2.2 范例2:使用having子句 3、分组案例3.1 范例1:显示所有非销售人员的工作名称以及从事同一工作的雇员的月工资的总和,并且要求满足从事同一工作雇员的月工资的合计大于5000,显示的结果按照月工资的合计的升序排列。3.2 范例2:统计所有领取佣金和不领取佣金的人数、平均工资🚴大家好!我是近视的脚踏实地,这篇文章主要是来学习Oracle的多表查询与分组统计,以及having子句以及分组案例 唯有行动 才能解除你所有的不安 1、多表查询与分组统计(重点)对于group by子句而言是在where子句之后执行的,所以在使用时可以进行限定查询,也可以进行多表查询 1.1 范例1:查询出每个部门的名称、部门人数、平均工资范例1: 查询出每个部门的名称、部门人数、平均工资 1、 确定要使用的数据表: ※ dept表:部门名称、部门人数 ※ emp表:统计数据 2、 确定已知的关联字段: ※ 部门与雇员emp.deptno=dept.deptno. 第一步: 换个思路,查询出每个部门的名称、雇员编号(count(empno))、基本工资(avg(sal)) select d.dname,e.empno,e.sal from emp e,dept d where e.deptno = d.deptno;
范例2: 查询每个部门的编号、名称、位置、部门人数、平均工资 1、 确定要使用的数据表: ※ dept表:编号、名称、位置 ※ emp表:统计信息 2、 确定已知的关联字段: ※ 部门与雇员emp.deptno=dept.deptno. 第一步: 查询每个部门的编号、名称、位置、雇员编号(count())、工资(avg(sal)) select d.deptno,d.dname,d.loc,e.empno,e.sal from emp e,dept d where e.deptno(+)= d.deptno;
现在要求查询出每个职位的名称,职位的平均工资,但是要求显示的职位的平均工资高于2000。 即:按照职位先进行分组,同时统计出每个职位的平均工资; 随后要求只显示那些平均工资高于2000的职位信息。那么既然现在要针对于显示的数据进行筛选,自然就会首先想到where子句,于是就写了如下代码👇: 2.1 范例1:错误的代码范例1: 错误的代码 select job,avg(sal) from emp where avg(sal) >2000 group by job;
范例2: 使用having子句 select job,avg(sal) from emp group by job having avg(sal)>2000;
说明: 关于where与having的区别 ※ where子句是在group by分组之前进行筛选,指的是选出那些可以参与分组的数据,并且 where子句之中不允许使用统计函数; ※having子句是在group by分组之后执行的,那么可以使用统计函数 3、分组案例下面通过两个具体的程序来进行分组统计的操作总结。 3.1 范例1:显示所有非销售人员的工作名称以及从事同一工作的雇员的月工资的总和,并且要求满足从事同一工作雇员的月工资的合计大于5000,显示的结果按照月工资的合计的升序排列。范例1: 显示所有非销售人员的工作名称以及从事同一工作的雇员的月工资的总和,并且要求满足从事同一工作雇员的月工资的合计大于5000,显示的结果按照月工资的合计的升序排列。 第一步: 查询所有非销售人员的信息,where进行限定查询。 select * from emp where job'SALESMAN';
范例2: 统计所有领取佣金和不领取佣金的人数、平均工资 按照简单的单细胞思维模式,现在肯定使用comm分组。 select comm,count(*),avg(sal) from emp group by comm;
那么现在可以换一个思路,如果说把问题拆分一下: ※ 查询出所有领取佣金的雇员的人数、平均工资。直接使用where子句,都不用使用group by select '领取佣金'info,count(*),avg(sal) from emp where comm is not null;※ 查询所以不领取佣金的雇员的人数、平均工资。直接使用where子句,都不用使用group by select '领取佣金'info,count(*),avg(sal) from emp where comm is null;
下一篇👉Oracle-----子查询简介&where子句使用子查询 本篇博客到这就完啦,非常感谢您的阅读🙏,如果对您有帮助,可以帮忙点个赞或者来波关注鼓励一下喔😬 ,嘿嘿👀 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |