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