1、各部门中,不同类别岗位的平均工资和最大工资;
2、各类别岗位中,不同部门的平均工资和最大工资;
我写这么两个SQL:
1、SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO;
2、SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY JOB,DEPTNO ORDER BY DEPTNO;
执行结果却是一样的?
求解这两种不通业务的分组方式实现.
7 个解决方案
#1
结果确实没什么区别,你看看下面这种写法,是不是能明显点?
SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO;
SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY JOB,DEPTNO ORDER BY JOB;
#2
GROUP BY DEPTNO,JOB
GROUP BY JOB,DEPTNO
-----------------------
上一行是表示先按照deptno分组再按照job分组,
下一行是表示先按照job分组再按照deptno分组
-----------------------
这个没什么好讨论的。
#3
就是分组顺序不同
#4
#5
2楼:
那跟描述的两个业务是有区别的吧?
那跟描述的两个业务是有区别的吧?
#6
不知道这里的分组跟EXCEL的多级分类汇总是否一致?
#7
用rollup()函数。
select deptno,nvl(job,'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(deptno,job);
select job,nvl(to_char(deptno),'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(job,deptno);
select deptno,nvl(job,'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(deptno,job);
select job,nvl(to_char(deptno),'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(job,deptno);
#1
结果确实没什么区别,你看看下面这种写法,是不是能明显点?
SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY DEPTNO,JOB ORDER BY DEPTNO;
SELECT AVG(SAL),MAX(SAL),JOB,DEPTNO FROM SCOTT.EMP GROUP BY JOB,DEPTNO ORDER BY JOB;
#2
GROUP BY DEPTNO,JOB
GROUP BY JOB,DEPTNO
-----------------------
上一行是表示先按照deptno分组再按照job分组,
下一行是表示先按照job分组再按照deptno分组
-----------------------
这个没什么好讨论的。
#3
就是分组顺序不同
#4
#5
2楼:
那跟描述的两个业务是有区别的吧?
那跟描述的两个业务是有区别的吧?
#6
不知道这里的分组跟EXCEL的多级分类汇总是否一致?
#7
用rollup()函数。
select deptno,nvl(job,'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(deptno,job);
select job,nvl(to_char(deptno),'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(job,deptno);
select deptno,nvl(job,'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(deptno,job);
select job,nvl(to_char(deptno),'合计'),max(sal),avg(sal),sum(sal)
from emp
where job is not null
group by rollup(job,deptno);