类别:

窗口函数 (排名相关)

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 函数的 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|
+--------+------+-------+
Copy
语言: 中文