![](/img/trans.png)
[英]Oracle SQL - How to get distinct rows using RANK() or DENSE_RANK() or ROW_NUMBER() analytic function?
[英]dense_rank() analytic function in oracle
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和commision進行分組,並且只能通過deptno進行分區。
如何在不同的列上進行分組並根據不同列的分區查找排名
不要group by
- 你的partition by
為你做的!
更具體地說,由於您在partition by
引用了sal
並按order by
,因此group by
需要知道它以對結果進行分組。 但是,在這種情況下,您不需要group by
因為您的dense_rank
正在使用partition by
子句中的自己的分區,並且不會跟隨group by
任何內容。
關於你的編輯,請over
那里使用你的over
子句:
sum(sal) over (partition by deptno, commission) as salsum
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.