ウィンドウ関数のサポートは、ドライバーの試験的な機能です。この機能は、SQL-92 準拠というドライバーのコア範囲を超えるものです。そのため、ウィンドウ関数のパフォーマンスは最適ではない場合があります。
ウィンドウ関数の句
OVER
OVER 句は、ウィンドウ関数が実行されるウィンドウを定義します。PARTITION BY
PARTITION BY 句は、ウィンドウをパーティションと呼ばれるサブウィンドウに細分化します。PARTITION BY 句で指定されたカラムの各一意の値ごとに、その値を持つすべてのレコードがまとめて 1 つのパーティションを形成します。 SELECT A, B, OVER (PARTITION BY A ORDER BY B) From Lead ここで指定するのはサポートされている任意のウィンドウ関数句です。算術関数
これらのウィンドウ関数は、ウィンドウ内のレコードに対して数学的演算を実行します。COUNT
各パーティション内のレコード数を計算します。計算されたカラムのデータ型は「int」です。 構文COUNT_BIG
各パーティション内のレコード数を計算します。計算されたカラムのデータ型は「bigint」です。 構文MIN
パーティションごとの数値カラムの最小値を計算します。 構文MAX
パーティションごとの数値カラムの最大値を計算します。 構文SUM
パーティションごとの数値カラムの合計を計算します。 構文AVG
パーティションごとの数値カラムの平均値を計算します。 構文MEDIAN
パーティションごとの数値カラムの中央値を計算します。 構文STDEV
パーティションごとの数値カラムの標準偏差を計算します。 構文STDEVP
パーティションごとの数値カラムの母標準偏差を計算します。 構文VAR
パーティションごとの数値カラムの統計的標準分散を計算します。 構文VARP
パーティションごとの数値カラムの母分散を計算します。 構文ランキング関数
これらのウィンドウ関数は、ウィンドウおよびそのパーティション内に含まれるレコードをランク付けします。RANK
必須の ORDER BY 句で指定されたカラムの値に基づいて、ウィンドウ内の各レコードにランク番号を割り当てます。 ランク付け対象のカラムで 2 つ以上のレコードが同じ値を持つ場合、それらはすべて同じランク番号を受け取り、ランクカウンターは内部的に増加して、ORDER BY 句のカラムで重複する値を持つレコードごとにランク番号が 1 つずつスキップされます。 構文DENSE_RANK
RANK() 関数と同様に動作しますが、ランク付け対象のカラムで重複する値を持つレコードごとに内部のランクカウンターを増加させません。 つまり、ORDER BY 句のカラムで同一の値を持つレコードは同じランク番号を共有しますが、この関数はランク番号をスキップすることはありません。 構文ROW_NUMBER
各レコードに対して行番号を計算します。OVER 句内の ORDER BY 句が必須です。 構文NTILE
順序付けされたパーティションの行を、指定された数のほぼ等しいグループ(バケット)に分散します。各グループには 1 から始まるバケット番号が割り当てられます。グループ内の各行に対して、NTILE() 関数はその行が属するグループを表すバケット番号を割り当てます。 構文- buckets 行を分割するバケットの数。バケットは正の整数に評価される式またはサブクエリにすることができます。ウィンドウ関数にすることはできません。
- PARTITION BY 結果セットの行を、NTILE() 関数が適用されるパーティションに分散します。
- ORDER BY NTILE() が適用される各パーティション内の行の論理的な順序を指定する句。
分析関数
これらのウィンドウ関数は、ウィンドウ内のレコードに対して分析的演算を実行します。PERCENT_RANK
各行の相対ランク(SQL パーセンタイル)を計算します。0 より大きい値を返しますが、最大値は 1 になります。NULL 値はカウントされません。この関数は非決定的です。 構文- PARTITION BY デフォルトでは、SQL Server はデータセット全体を 1 つのセットとして扱います。PARTITION BY 句を指定して、データを複数のセットに分割できます。Percent_Rank 関数は各セットに対して分析計算を実行します。このパラメータはオプションです。
- ORDER BY データを昇順または降順でソートします。このパラメータは必須です。