誰か、このpartition by
キーワードが何をするのか、また、実際にどのように動作するのか、また、なぜそれを使用するのかを説明していただけませんか? 他の人が書いた SQL クエリがあり、それが何をするのか理解しようとしています。
パーティションの例:
SELECT empno, deptno, COUNT(*)
OVER (PARTITION BY deptno) DEPT_COUNT
FROM emp
オンラインで見た例は、少し詳細すぎるように思えます。
ベストアンサー1
このPARTITION BY
句は、句内の各「GROUP」に使用されるレコードの範囲を設定しますOVER
。
サンプル SQL では、DEPT_COUNT
すべての従業員レコードについて、その部門内の従業員数を返します。(テーブルを非正規化しているのと同じでemp
、テーブル内のすべてのレコードが返されますemp
。)
emp_no dept_no DEPT_COUNT
1 10 3
2 10 3
3 10 3 <- three because there are three "dept_no = 10" records
4 20 2
5 20 2 <- two because there are two "dept_no = 20" records
別の列 (例: ) がある場合はstate
、その州に部門がいくつあるかを数えることができます。
これは、結果セットを集約せずに (つまり、一致するレコードを削除せずに)の結果GROUP BY
( SUM
、など) を取得するようなものです。AVG
LAST OVER
これは、またはMIN OVER
関数を使用して、たとえば、部門内の最低給与と最高給与を取得し、それをサブ選択なしでこのレコードの給与に対する計算に使用する場合に便利です。これにより、はるかに高速になります。
リンク先を読むAskTomの記事詳細についてはこちらをご覧ください。