四、 使用RANK和DENSE_RANK处理同级问题
基于可选的partition子句和要求的order by子句,ROW_NUMBER函数默认地递增(加1)每一个返回结果的值。然而,有时你可能想以不同方式处理相同级别,而不是把相同的值赋给相同的级别。例如,前面显示的总订单列表中,Tito在2005年12月22日实现的订单数与Bruce在2006年1月5日实现的订单数相同;然而,ROW_NUMBER函数却把这两行评价为#4和#5,而不是都评价为#4。
RANK和DENSE_RANK函数都能够使用相同的评价计数级。例如,使用下列查询:
| SELECT c.Name,o.DateOrdered,tab.TotalOrderAmount, RANK() OVER (ORDER BY TotalOrderAmount DESC) AS BestCustomerFROM vwTotalAmountBilledPerOrder AS tab INNER JOIN Orders AS o ON o.OrderID = tab.OrderID INNER JOIN Customers AS c ON c.CustomerID = o.CustomerID |
这个语句将返回如下表所示的结果:
| Name | DateOrdered | TotalOrderAmount | BestCustomer |
| Bob | 12/1/2005 | 12649.9900 | 1 |
| Darren | 1/2/2006 | 620.0000 | 2 |
| Bob | 12/19/2005 | 265.8500 | 3 |
| Tito | 12/22/2005 | 14.9500 | 4 |
| Bruce | 1/5/2006 | 14.9500 | 5 |
| Tito | 12/18/2005 | 12.4400 | 6 |
| Bruce | 1/4/2006 | 9.9900 | 7 |
| Lee Ann | 1/3/2006 | 8.5000 | 8 |
| ... | |||
注意,具有相同数量的两个订单是怎样都被评价为#4的。RANK和DENSE_RANK之间的不同之处在于,在平级的结果后他们是如何重新开始计数的。RANK绕过尽可能多的平级的结果。在我们上面的示例中,因为有两个结果绑定在#4上,因此跟随其后的#5被跳过而评价等级以#6继续。另一方面,DENSE_RANK从下一个整数继续。如果我们在上面的查询中使用函数名DENSE_RANK代替RANK,那么Tito在2005年12月18日相应于单价$12.44的订单评价将是#5。
类似于ROW_NUMBER函数,RANK和DENSE_RANK函数都能使用可选的PARTITION BY语句。
五、 使用NTILE函数对评价结果进行分组
SQL Server 2005新引入的最后一个与T-SQL函数相关的评价函数是NTILE(int)。NTILE象其它的评价函数一样操作,但是它能够把结果分成组,每组中相应相同评价结果的记录。你可以使用NTILE函数把结果分解成两组、三组或四组等,如下例所示:
| SELECT ProductID,Name,Price,NTILE(4) OVER (ORDER BY Price DESC) as QuartileFROM Produts |
这个语句将返回如下表所示的结果:
| ProductID | Name | Price | Quartile |
| 8 | Desk | 495.0000 | 1 |
| 10 | Executive Chair | 295.0000 | 1 |
| 9 | Chair | 125.0000 | 2 |
| 5 | Mouse | 14.9500 | 2 |
| 6 | Mousepad | 9.9900 | 3 |
| 11 | Scissors | 8.5000 | 3 |
| 4 | Stapler | 7.9500 | 4 |
| 3 | Binder | 1.9500 | 4 |
在随本文下载的演示程序中,我提供了一个例子,它使用了一个具有NTILE函数的视图来允许用户有选择地查看各种分组的最大订单量。
六、 结论
在本文中,我们探讨了SQL Server 2005中的四个新函数的用法。这四个新函数分别是:ROW_NUMBER,RANK,DENSE_RANK和NTILE。与SQL Server 2000使用的旧技术相比,它们使得返回评价结果更为容易。然而,这些函数仅仅是SQL Server 2005中所提供的新的T-SQL特征中的极少的一部分。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·SQL Server 数据处理专题 (1485篇文章)
·SQL Server 索引和查询专题 (2717篇文章)
·SQL Server (1448篇文章)
·数据库体系架构 (452篇文章)
·SQL Server (1449篇文章)
·SQL Server 索引和查询专题 (2717篇文章)
·SQL Server (1448篇文章)
·数据库体系架构 (452篇文章)
·SQL Server (1449篇文章)
·网络分析软件sniffer pro入门 (12772次浏览)
·Win XP系统内存性能优化 (6761次浏览)
·Windows 2000 安装指南 (3215次浏览)
·防止sql注入的简单方法 (3094次浏览)
·组策略应用技巧 (1643次浏览)
·SQL Server SQL语句导入导出大全 (1365次浏览)
·再谈SQL注入入侵动网SQL版 (1239次浏览)
·ms sql删除重复的记录 (1092次浏览)
·DM分区软件使用详解 (596次浏览)
·在SQL Server中使用存储过程的代码 (593次浏览)
·Win XP系统内存性能优化 (6761次浏览)
·Windows 2000 安装指南 (3215次浏览)
·防止sql注入的简单方法 (3094次浏览)
·组策略应用技巧 (1643次浏览)
·SQL Server SQL语句导入导出大全 (1365次浏览)
·再谈SQL注入入侵动网SQL版 (1239次浏览)
·ms sql删除重复的记录 (1092次浏览)
·DM分区软件使用详解 (596次浏览)
·在SQL Server中使用存储过程的代码 (593次浏览)
·存储厂商追捧微软SQL Server 2005 10-28
·NetApp发布SQL Server 2005数据管理软件 10-28
·飞康IPStor将支持微软SQL Server 2005 10-28
·飞康对SQL Server 2005提供用户化支持 10-28
·初次使用SQL破解某电影网站的记录 10-28
·黑客教学:SQL注入法攻击一日通(V3.0) 10-28
·减少SQL日志的方法 10-28
·传奇3.0--常要用到的SQL脚本 10-28
·传奇3.0--使用SQL数据浏览器来导入和修改你的数据 10-28
·PL/SQL集合增强 10-28
·NetApp发布SQL Server 2005数据管理软件 10-28
·飞康IPStor将支持微软SQL Server 2005 10-28
·飞康对SQL Server 2005提供用户化支持 10-28
·初次使用SQL破解某电影网站的记录 10-28
·黑客教学:SQL注入法攻击一日通(V3.0) 10-28
·减少SQL日志的方法 10-28
·传奇3.0--常要用到的SQL脚本 10-28
·传奇3.0--使用SQL数据浏览器来导入和修改你的数据 10-28
·PL/SQL集合增强 10-28
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



