3
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;

Salgroup 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 でのみパーティション分割する方法を教えてください。

別の列でグループ化して、別の列での分割に基づいてランクを検索するにはどうすればよいですか

4

1 に答える 1

5

何もしないでgroup byください-あなたはあなたpartition byのためにそれをします!

より具体的には、 andで参照salしているため、結果をグループ化するためにそれを認識する必要があります。ただし、この場合、 your は節から独自のパーティション分割を使用しているため、は必要ありません。partition byorder bygroup bygroup bydense_rankpartition bygroup by

あなたの編集に関しては、overそこにあなたの句を使用してください:

sum(sal) over (partition by deptno, commission) as salsum

于 2012-01-11T18:49:59.773 に答える