【译】高级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> )

其中:

为了更好的理解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
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!