カテゴリ:

ウィンドウ関数 (ランク関連)

NTILE

順序付けられたデータセットを、 constant_value で指定されたバケットの数に均等に分割します。バケットには、1から constant_value まで順番に番号が付けられます。

構文

NTILE( <constant_value> ) OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
Copy

引数

constant_value

必要なバケット数です。正の整数値でなければなりません。

expr1

データをグループに分割する場合、分割する基準(通常は列)を指定します。例えば、都道府県ごとにパーティションを作成できます。

expr2

ウィンドウ内の行を並べ替える式(通常は列)です。例えば、タイムスタンプで並べ替えることができます。

使用上の注意

データがパーティション化されている場合、データは各パーティション内で均等にバケットに分割されます。例えば、バケットの数が3で、データが都道府県ごとにパーティション分割されている場合、各都道府県の約1/3行が各バケットに配置されます。

ステートメントに出力用の ORDER BY 句と NTILE 関数用の ORDER BY句 がある場合、2つは独立して動作します。NTILE 関数の ORDER BY は各バケットに割り当てられる行に影響し、出力の ORDER BY は出力行が表示される順序を決定します。

SELECT
  exchange,
  symbol,
  NTILE(4) OVER (PARTITION BY exchange ORDER BY shares) AS ntile_4
FROM trades
ORDER BY exchange, NTILE_4;

+--------+------+-------+
|exchange|symbol|NTILE_4|
+--------+------+-------+
|C       |SPY   |      1|
|C       |AAPL  |      2|
|C       |AAPL  |      3|
|N       |SPY   |      1|
|N       |AAPL  |      1|
|N       |SPY   |      2|
|N       |QQQ   |      2|
|N       |QQQ   |      3|
|N       |YHOO  |      4|
|Q       |MSFT  |      1|
|Q       |YHOO  |      1|
|Q       |MSFT  |      2|
|Q       |YHOO  |      2|
|Q       |QQQ   |      3|
|Q       |QQQ   |      4|
|P       |AAPL  |      1|
|P       |YHOO  |      1|
|P       |MSFT  |      2|
|P       |SPY   |      3|
|P       |MSFT  |      4|
+--------+------+-------+
Copy