- カテゴリ:
ウィンドウ関数 (ランク関連)
NTILE¶
順序付けられたデータセットを、 constant_value
で指定されたバケットの数に均等に分割します。バケットには、1から constant_value
まで順番に番号が付けられます。
構文¶
NTILE( <constant_value> ) OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] )
引数¶
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|
+--------+------+-------+