排名函墙绅褡孛数NTILE是SQL2005中加入的,如果对他还不了解,那么先学习下【SQL2005新功能:缪梨痤刻[2]排名函数】这篇经验。下面有个实例,对班级进行排队,每队至多3人。由于班级的人数是不同的,也就是NTILE的组数不定,下面怎么来实现这个排队呢?
工具/原料
SQL2005,或更高版本(这里使用SQL2012)
排名函数NTILE是怎么计算的?
1、先看下面的查询,从中可以发现,其实NTILE的值与公式[(N*(ROW_NUMBER()-1)/COUNT(*))+1]计算得到的值是一致的。
通过新建方法来实现
1、由于鲍伊酷雪NTILE中的参数无法根据分区动态获取。可能可以,不过作者没有写出来。参数说明:integer_expression只能引用PARTITIONBY子莞鲕塾侃句中的列。integer_expression不能引用在当前FROM子句中列出的列。
2、创建取分区分组的方法。通过班级来获取。CAST((CEILING(COUNT(1)*1.0/3))ASINT)将总人数/每队人数,使用进位取整。
3、查询如下关于CROSSAPPLY的用法,在后续经验中介绍。
使用自定义计算方法
1、上面分析了NTILE的计算方法,只需将公式[(N*(ROW_NUMBER()-1)/COUNT(*))+1]中的N参数修改即可。
2、查询结果与上面的一致
感谢阅读
1、感谢你把本经验阅读完,如果有写的不好的地方,请指出以便纠正,以免误人子弟。如果觉得本经验有用,浪费你几秒钟的时间在页面左下方点个赞。在页面顶部/经验底部投个票。