Oracleの「Partition By」キーワードに関する質問

Oracleの「Partition By」キーワードに関する質問

誰か、この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の記事詳細についてはこちらをご覧ください。

おすすめ記事