ORACLE GROUP BY进行多字段分组的问题

时间:2022-06-14 13:37:37
数据库中scott.emp这么一张表,我要进行如下业务操作:
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


该回复于2012-05-09 16:32:57被版主删除

#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);

#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


该回复于2012-05-09 16:32:57被版主删除

#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);