- 类别:
窗口函数 (排名相关)
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 函数的 BY ORDER 子句,则两者独立运行; 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|
+--------+------+-------+