簡體   English   中英

oracle中的dense_rank()分析函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM