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節を変更せずに同じselectでランクを取得する代替手段はありますか?給料に基づいてランクのみを注文したい。oracleのdense_rank()解析関数
EDIT
だから何を示唆した答えになり、唯一のDEPTNOによってDEPTNOおよびコミッションやパーティションによってグループに別の列名のコミッションは、emp表にあるとし、私が持っている:
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;
ここで、デプノとコミッションでグループ化し、deptnoでパーティション化する方法を教えてください。
どのようにすることができますI GROUP BY異なる列ON AND ON DIFFERNT COLUMN
:ソリューションのおかげで、どのように私はグループ別の列を持つと別のパーティションに基づいてランクを検索することでできますか? –
@ user1138658 - 私が編集したように、異なる粒度を持っているならば、あなたは 'over'を一番下に使いたいでしょう。 'over'の世界に向かうと、' group by'を避けたいと思います(これはできます、それはちょっと難しいことです)。 – Eric
:同意した感謝:) –