sql - NTILE() 如何处理不平衡的数据?
问题描述
长话短说,我将一些数据分组到不同的段中,并注意到一列中的迁移使用NTILE(10) OVER(ORDER BY column_name DESC)
.
此列中大约 50% 的值是 0,这意味着前 5 个十分位数都将具有相同的值。
该函数如何NTILE()
处理这样的情况?
我会天真地假设它按值排序并将其分成 10 个偶数部分,这意味着它或多或少地将 0 随机分配给十分位数,但我无法找到解释这种特殊情况的文档。
额外的问题 - 如果值是NULL
而不是,行为会改变0
吗?
解决方案
NTILE()
被定义为使图块的大小尽可能相等。大小可能相差 1 行,但不会超过 1 行。
因此,具有相同键值的行order by
可以位于不同的图块中。
该文档试图描述这一点:
将每个窗口分区的行划分为 n 个桶,范围从 1 到最多 n。存储桶值最多相差 1。
第二句话真的是桶大小最多相差1。
推荐阅读
- javascript - 手动更新 redux 状态时更改了 redux 状态引用
- sql-server - 同一张表上分组行的差异和百分比变化
- css - Angular6 - 如何根据移动设备和浏览器改变 .css 类的宽度
- html - 如何最小化 html 表格中的列宽?
- sql-server - 在表值函数中声明变量
- r - 如何缩小R中的直方图
- html - 悬停时文本移动
- powershell - 尝试使用 Powershell 将目录上传到 FTP 服务器时出现错误 (530)
- c# - 在选择行并按 Enter 时获取 datagridview 中的行索引
- javascript - 遍历嵌套状态并更新项目