[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]
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]