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

  我了解到的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 ?

  在线等,知道的各位园友帮忙解答一下,感激!

喵喔喔
浏览 584回答 7
7回答

慕斯王

其实就是这么去理解这句话的意思,要么都相同,要么从某一个记录较少的组开始后面所有组的记录数都与该组相同,那么53条分配的时候不能都相同,当他分配到第4组的时候,他发现从第四组一直到第五组他们能平均分配,也就是说第五组的记录数能和第四组的记录数相同,则分配完成,所以不会分配成11 11 11 11 9。 可以参考我的这边博客 Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

BIG阳

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

缥缈止盈

这个应该跟求类似“方差”有些关系,分组要让“方差尽”可能的小。 比如53条,分成5组其平均每组最接近11条,那么11 11 11 10 10的方差为((11-10)^2)*2 = 2; 11 11 11 11 9的方差为(11-9)^2 = 4; 所以,分组为第一种情况。 还有就是NTILE()是不确定性函数,方差小那么确定性大。

当年话下

11 11 11 11 9的方差为(11-9)^2 = 4;  平方之后不用*2吗? 是的,有点类似,这个问题我已经明白了的,目前正在写博客总结。谢谢回复!

长风秋雁

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

慕沐林林

@zhengldg: 额,是的,方差是和平均数进行比较,这个还有点不一样。不过还是谢谢你了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server