【发布时间】:2012-02-08 03:15:54
【问题描述】:
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 子句的情况下在同一选择中获得排名?您只想根据薪水排序。
编辑
假设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;
现在我如何按 depno 和佣金分组,并且只按 deptno 分区。
我如何在不同的列上进行分组并根据不同列上的分区来查找排名
【问题讨论】:
标签: sql oracle oracle10g analytic-functions