为了账号安全,请及时绑定邮箱和手机立即绑定

关于SqlServer四大排名函数NTILE()函数的问题

关于SqlServer四大排名函数NTILE()函数的问题

喵喔喔 2018-12-07 09:09:42
  我了解到的NTILE()函数的分组依据如下:   1、每组的记录数不能大于它上一组的记录数,也就是说,第1组中的记录数只能大于等于第2组及以后各组中的记录数。   2、所有组中的记录数要么都相同,要么从某一个记录较少的组开始后面所有组的记录数都与该组的记录数相同。     问题:   数据总数有54条,使用NTILE()函数分成5组,结果如下:11 11 11 11 10   总数据若有53条,分成5组结果为:11 11 11 10 10  为什么不是 11 11 11 11 9 ?   在线等,知道的各位园友帮忙解答一下,感激!
查看完整描述

7 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

其实就是这么去理解这句话的意思,要么都相同,要么从某一个记录较少的组开始后面所有组的记录数都与该组相同,那么53条分配的时候不能都相同,当他分配到第4组的时候,他发现从第四组一直到第五组他们能平均分配,也就是说第五组的记录数能和第四组的记录数相同,则分配完成,所以不会分配成11 11 11 11 9。

可以参考我的这边博客

Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

查看完整回答
反对 回复 2019-01-07
?
BIG阳

TA贡献1859条经验 获得超6个赞

我就是看的他的博客,谢谢!

查看完整回答
反对 回复 2019-01-07
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

这个应该跟求类似“方差”有些关系,分组要让“方差尽”可能的小。

比如53条,分成5组其平均每组最接近11条,那么11 11 11 10 10的方差为((11-10)^2)*2 = 2;

11 11 11 11 9的方差为(11-9)^2 = 4;

所以,分组为第一种情况。

还有就是NTILE()是不确定性函数,方差小那么确定性大。

查看完整回答
反对 回复 2019-01-07
?
当年话下

TA贡献1890条经验 获得超9个赞

11 11 11 11 9的方差为(11-9)^2 = 4;  平方之后不用*2吗?

是的,有点类似,这个问题我已经明白了的,目前正在写博客总结。谢谢回复!

查看完整回答
反对 回复 2019-01-07
?
长风秋雁

TA贡献1757条经验 获得超7个赞

@晓菜鸟: 我那个 *2 是因为有2个10,所有乘以2,误导你了。。额

查看完整回答
反对 回复 2019-01-07
?
慕沐林林

TA贡献2016条经验 获得超9个赞

@zhengldg: 额,是的,方差是和平均数进行比较,这个还有点不一样。不过还是谢谢你了。

查看完整回答
反对 回复 2019-01-07
  • 7 回答
  • 0 关注
  • 583 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信