长话短说,我将一些数据分组到不同的段中,并注意到一列中的迁移使用NTILE(10) OVER(ORDER BY column_name DESC)
拆分为十分位数。
此列中大约 50% 的值为 0,这意味着前 5 个十分位数都具有相同的值。
NTILE()
函数如何处理此类情况?
我会天真地假设它按值排序并只是将其分成 10 个偶数块,这意味着它或多或少地将 0 随机分配给十分位数,但我无法找到解释这种特殊情况的文档。
奖励问题 -- 如果值NULL
而不是0
,行为会改变吗?
NTILE()
的定义是为了使磁贴的大小尽可能相等。 大小可能相差 1 行,但不能相差多于一行。
因此,具有相同值的order by
键的行可以位于不同的磁贴中。
文档试图对此进行描述:
将每个窗口分区的行划分为 n 个存储桶,范围从 1 到最多 n。存储桶值最多相差 1。
第二句话实际上是存储桶大小最多相差 1。