Gau*_*oni 3 sql oracle analytic-functions oracle10g
SELECT empno, deptno
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by empno, deptno --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
此查询不起作用,因为它Sal应该在group by子句中.任何人都可以解释为什么会这样,并且有没有其他选择在不改变group by子句的情况下获得相同选择的排名?你想只根据工资订购排名.
编辑
假设在emp表中有另一个列名commision,我必须通过deptno和commision分组并仅通过deptno进行分区,那么建议的答案是什么:
SELECT empno, deptno,sum(sal)
dense_rank() OVER (PARTITION BY deptno
ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by deptno,commision --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)
现在我如何通过depno和commision进行分组,并且只能通过deptno进行分区.
如何在不同的列上进行分组并根据不同列的分区查找排名
什么都不做group by- 你partition by为它做了!
更具体地讲,因为你引用sal你的partition by和order by,group by需要注意的是分组的结果是卜.但是,在这种情况下,您不需要,group by因为您dense_rank正在使用自己的partition by子句分区,并且不会遵循其中的任何内容group by.
关于您的编辑,请over在那里使用您的子句:
sum(sal) over (partition by deptno, commission) as salsum