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 分区。
我如何在不同的列上分组并根据不同列上的分区查找排名