NTILE [analytic]
将有序数据集(分区)等分成
窗口内的
{value}
个子集,其中子集通过参数 constant‑value 编号为 1。例如,如果 constant-value= 4,且分区包含 20 行,则 NTILE
会将分区行分成四个相等的子集(每个子集包含五行)。 NTILE
为行指定一个从 1 到 4 的数字,然后将每一行分配给其中一个子集。为第一个子集中的行分配 1,为第二个子集中的五行分配 2,依此类推。
如果分区行数无法被子集数整除,则任何子集的行数不得比任何其他子集多超过 1,且最小的子集具有多余行数。例如,如果 constant-value = 4,且行数 = 21,则第一个子集有 6 行,第二个子集有 5 行,依此类推。
如果子集数大于行数,则对等同于行数的子集进行填充,剩余的子集留空。
行为类型
不可变语法
NTILE ( constant‑value ) OVER (
[ window-partition-clause ]
window-order-clause )
参数
- constant‑value
- 指定子集的数目,其中 constant‑value 必须为每个分区分解成为正常数。
OVER()
- 请参阅分析函数。
示例
下面的查询将每个月的销售额分配至四个子集之一。
=> SELECT calendar_month_name AS MONTH, SUM(sales_quantity),
NTILE(4) OVER (ORDER BY SUM(sales_quantity)) AS NTILE
FROM store.store_sales_fact JOIN date_dimension
USING(date_key)
GROUP BY calendar_month_name
ORDER BY NTILE;
MONTH | SUM | NTILE
-----------+---------+-------
November | 2040726 | 1
June | 2088528 | 1
February | 2134708 | 1
April | 2181767 | 2
January | 2229220 | 2
October | 2316363 | 2
September | 2323914 | 3
March | 2354409 | 3
August | 2387017 | 3
July | 2417239 | 4
May | 2492182 | 4
December | 2531842 | 4
(12 rows)