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;
此查询不起作用,因为Sal
应该在group by子句中。任何人都可以解释为什么它是这样的,是否有任何替代方案可以在不改变group by子句的情况下在同一select中获得排名?你想根据工资排名。oracle中的dense_rank()解析函数
编辑
假设有EMP表的另一列名佣金,我必须GROUP BY DEPTNO和佣金和分区由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;
现在我怎么可以按depno和commision分组,只有deptno分区。
我集团通过在不同怎么可以COLUMN和查找RANK基于划分由不同的充柱
:谢谢你的解决方案,但我怎么能与不同的列,并找到根据不同的分区排名小组? – 2012-01-11 19:04:33
@ user1138658 - 在我编辑过程中,如果您有不同的粒度,您会希望一直使用“over”。一旦进入'over'世界,你想避免'group by'(它可以完成,这真的很棘手)。 – Eric 2012-01-11 19:06:58
:同意谢谢:) – 2012-01-11 19:11:57