【译】高级T-SQL进阶系列 (七)【下篇】:使用排序函数对数据进行排序
时间:2020-02-05 18:51:47
收藏:0
阅读:73
使用NTILE函数的示例
NTILE函数将一组记录分割为几个组。其返回的分组数是由一个整形表达式指定的。如下你会找到NTILE函数的句法格式:
NTILE (integer_expression) OVER ( [ PARTIION BY <partition_column> ] ORDER BY <order_by_column> )
其中:
- <integer_expression>:指定了将要创建的不同分组的数目
- <partition_column>:指定了一个或者多个列名,其将用来对数据进行分区
- <order by column>: 指定了一个或者多个列名,其将用来对各个分区的输出进行排序
为了更好的理解NTILE函数是做什么的,让我们来查看一些不同的例子。
对于第一个例子,我们假设你想将每一个PostalCode归为两个分组中的一个。为了满足这个需求,我将运行在列表4的代码中的NTILE函数:
USE AdventureWorks2012; GO SELECT PostalCode, StateProvinceID, NTILE(2) OVER (ORDER BY PostalCode ASC) AS NTileValue FROM Person.Address WHERE StateProvinceID IN (23,46);
列表4:NTILE查询
当我运行列表4的代码,我将得到结果4的结果:
PostalCode StateProvinceID NTileValue --------------- --------------- -------------------- 03064 46 1 03064 46 1 03106 46 1 03276 46 1 03865 46 1 83301 23 2 83402 23 2 83501 23 2 83702 23 2 83864 23 2
结果4:从运行列表4的代码产生的输出
通过查看结果4的输出,你可以看到会有两个不同的NTileValue列值,1和2。之所以有两个不同的NTileValue值被创建,是因为我在列表4的查询语句中指定了“NTILE(2)”。在紧接着NTILE函数名的括号中的值是一个整型表达式,其指定了应该被创建的分组数。如同你在结果4中看到的,有10行数据被返回。前5行具有一个NTileValue 1,后5行具有NTileValue 2。列表4中的代码按预期创建了数据行的两个分组,每组都有一半的数据行。
你或许会问自己,,如果数据行数不能被NTILE函数的interger_expression参数整除,若产生一个余数,那么情况会是怎样的?当这种情形发生时,每一个余下的行会被放置在每个分组中,从第一个分组开始,直至所有的余数行都被分配给每个分组,如同你在列表5中将会看到的那样。列表5不仅演示了当integer_expression导致了一个不平均的数据行的分配时候会发生什么,而且其还演示了如何使得integer_expression成为一个本地变量。
原文:https://www.cnblogs.com/qianxingmu/p/12264899.html
评论(0)