NTILE() 如何处理不平衡的数据?



长话短说,我将一些数据分组到不同的段中,并注意到一列中的迁移使用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。

最新更新