《对oracle中分组函数的一点点理解》由会员分享,可在线阅读,更多相关《对oracle中分组函数的一点点理解(13页珍藏版)》请在金锄头文库上搜索。
1、对对 OracleOracle 中分组函数的一点点理解中分组函数的一点点理解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 g
2、roup 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 empwhere AVG(sal) 2000
3、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 表达式总结就
4、是: group by 和组函数都将赋予 字段组的概念,那么在这种情况下由 group by 修饰的字段和由组函数修饰的字段都是组字段,而前面的不是组字段,当然会出现错误where group by having order by -wgho -我走好要求显示出平均工资大于 2000 的部门编号和平均工资。select deptno,AVG(sal)from empwhere AVG(sal) 2000group by deptno ; /第三行出现错误: 此处不允许使用分组函数分组函数只能在分组中使用,不允许在 where 语句之中出现,我们只能使用分组过滤select deptno,AVG
5、(sal)from empgroup by deptno HAVING AVG(sal) 2000;显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列empempno,ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptnodeptdeptno,dname,locsalgradegrade,losal,hisalbonusename,job,sal,comm这么长的语句:分解显示非销售人员工作名称:select job from emp where job SA
6、LESMANgroup by jobgroup by deptno ; /第三行出现错误: 此处不允许使用分组函数分组函数只能在分组中使用,不允许在 where 语句之中出现,我们只能使用分组过滤select deptno,AVG(sal)from empgroup by deptno HAVING AVG(sal) 2000;显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列empempno,ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptnodeptde
7、ptno,dname,locsalgradegrade,losal,hisalbonusename,job,sal,comm这么长的语句:分解显示非销售人员工作名称:select job from emp where job SALESMANgroup by job。 。 。并且要满足从事同一工作的雇员的月工资合计大于$5000select job,SUM(sal) from empwhere job 5000。 。 。输出结果按月工资的合计升序排列select job,SUM(sal) su from empwhere job 5000order by su; /使用别名不叫分组函数,可以使
8、用分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句求出平均工资最高的部门工资select deptno,MAX(AVG(sal)from empgroup by deptno; /错误,不是单组分组函数,理解:查询的东西一个是一层组函数,一个是两层组函数,显然他们不是同一级别,当然不能一起使用改成:select MAX(AVG(sal)from empgroup by deptno;group by 有时候就是为了使用下面的分组函数count() avg() max(); / 一般针对于数字的应用上min(); sum()如果程序中使用了分组函数,则有两种可以使用的
9、情况: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 和组函数都将赋予 字段组的概念,那么在这种情
10、况下由 group by 修饰的字段和由组函数修饰的字段都是组字段,而前面的不是组字段,当然会出现错误where group by having order by -wgho -我走好要求显示出平均工资大于 2000 的部门编号和平均工资。select deptno,AVG(sal)from empwhere AVG(sal) 2000min(); sum()如果程序中使用了分组函数,则有两种可以使用的情况:1。程序中存在了 group by ,并制定了分组条件,这样可以将分组条件一起查询出来2。如果不使用 group by 的话,则只能单独使用分组函数所以: select deptno,co
11、unt(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 -我走好要求显示出
12、平均工资大于 2000 的部门编号和平均工资。select deptno,AVG(sal)from empwhere AVG(sal) 2000group by deptno ; /第三行出现错误: 此处不允许使用分组函数分组函数只能在分组中使用,不允许在 where 语句之中出现,我们只能使用分组过滤select deptno,AVG(sal)from empgroup by deptno HAVING AVG(sal) 2000;显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列empempno,
13、ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptnodeptdeptno,dname,locsalgradegrade,losal,hisalbonusename,job,sal,comm这么长的语句:分解显示非销售人员工作名称:select job from emp where job SALESMANgroup by jobgroup by deptno ; /第三行出现错误: 此处不允许使用分组函数分组函数只能在分组中使用,不允许在 where 语句之中出现,我们只能使用分组过滤select deptno,AVG(sal)from empgro
14、up by deptno HAVING AVG(sal) 2000;显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且要满足从事同一工作的雇员的月工资合计大于$5000,输出结果按月工资的合计升序排列empempno,ename,job,mgr(雇员的领导的编号),hiredate,sal,comm,deptnodeptdeptno,dname,locsalgradegrade,losal,hisalbonusename,job,sal,comm这么长的语句:分解显示非销售人员工作名称:select job from emp where job SALESMANgroup by j
15、ob。 。 。并且要满足从事同一工作的雇员的月工资合计大于$5000select job,SUM(sal) from empwhere job 5000。 。 。输出结果按月工资的合计升序排列select job,SUM(sal) su from empwhere job 5000order by su; /使用别名不叫分组函数,可以使用分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句求出平均工资最高的部门工资select deptno,MAX(AVG(sal)from empgroup by deptno; /错误,不是单组分组函数,理解:查询的东西一个是一层组函数,一个是两层组函数,显然他们不是同一级别,当然不能一起使用改成:select MAX(AVG(sal)from empgroup by deptno;