当前位置:首页 > 系统运维 > 正文内容

详解SQL Server 2005四种排名函数(1)

a8116255311年前 (2015-10-04)系统运维11

下面通过具体的方案将用来讨论和演示不同的函数和它们的子句。

十一位演讲者在会议中发表演讲,并且为他们的讲话获得范围为 1 到 9 的分数。结果被总结并存储在下面的 Speakerstats 表中: 

Code

Code

2、RANK, DENSE_RANK

RANK 和 DENSE_RANK 函数非常类似于 ROW_NUMBER 函数,因为它们也按照指定的排序提供排序值,而且可以根据需要在行组(分段)内部提供。但是,与 ROW_NUMBER 不同的是,RANK 和 DENSE_RANK 向在排序列中具有相同值的行分配相同的排序。当 ORDER BY 列表不唯一,并且您不希望为在 ORDER BY 列表中具有相同值的行分配不同的排序时,RANK 和 DENSE_RANK 很有用。RANK 和 DENSE_RANK 的用途以及两者之间的差异可以用示例进行更好的解释。以下查询按照 score DESC 顺序计算不同演讲者的行号、排序和紧密排序值:

下面通过具体的方案将用来讨论和演示不同的函数和它们的子句。

十一位演讲者在会议中发表演讲,并且为他们的讲话获得范围为 1 到 9 的分数。结果被总结并存储在下面的 SpeakerStats 表中: 

Code

Code

Code
SELECT speaker, track, score,
ROW_NUMBER() OVER(ORDER BY score DESC) AS rownum,
RANK() OVER(ORDER BY score DESC) AS rnk,
DENSE_RANK() OVER(ORDER BY score DESC) AS drnk
FROM SpeakerStats

speaker    trackscore    rownum rnk drnk
---------- ---------- ----------- ------ --- ----
Jessica    Dev     9     1     1   1
Ron  Dev     9     21   1
Suzanne    DB    9     31   1
KathySys    8     44   2
Michele    Sys   854   2
Mike DB     864   2
KevinDB     777   3
BrianSys    787   3
Joe  Dev    699   4
Robert     Dev   6     10     9   4
Dan  Sys   311    11  5

正如前面讨论的那样,score 列不唯一,因此不同的演讲者可能具有相同的得分。行号确实代表下降的 score 顺序,但是具有相同得分的演讲者仍然获得不同的行号。但是请注意,在结果中,所有具有相同得分的演讲者都获得相同的排序和紧密排序值。换句话说,当 ORDER BY 列表不唯一时,ROW_NUMBER 是不确定的,而 RANK 和 DENSE_RANK 总是确定的。排序值和紧密排序值之间的差异在于,排序代表:具有较高得分的行号加 1,而紧密排序代表:具有明显较高得分的行号加 1。从您迄今为止已经了解的内容中,您可以推导出当 ORDER BY 列表唯一时,ROW_NUMBER、RANK 和 DENSE_RANK 产生完全相同的值。

3、NTILE

NTILE 使您可以按照指定的顺序,将查询的结果行分散到指定数量的组 (tile) 中。每个行组都获得不同的号码:之一组为 1,第二组为 2,等等。您可以在函数名称后面的括号中指定所请求的组号,在 OVER 选项的 ORDER BY 子句中指定所请求的排序。组中的行数被计算为 total_num_rows / num_groups。假如有余数 n,则前面 n 个组获得一个附加行。因此,可能不会所有组都获得相等数量的行,但是组大小更大只可能相差一行。例如,以下查询按照 score 降序将三个组号分配给不同的 speaker 行:

Code
SELECT speaker, track, score,
ROW_NUMBER() OVER(ORDER BY score DESC) AS rownum,
NTILE(3) OVER(ORDER BY score DESC) AS tile
FROM SpeakerStats

以下为结果集:

speaker    trackscore rownum tile
---------- ---------- ----------- ------ ----
Jessica    Dev    9     11
Ron  Dev    9     21
Suzanne    DB   9     31
KathySys   8     41
Michele    Sys   8     52
Mike DB     8     62
KevinDB     7     72
BrianSys    7     82
Joe  Dev    6     93
Robert     Dev   6     10     3
Dan  Sys    3     11     3

在 SpeakerStats 表中有 11 位演讲者。将 11 除以 3 得到组大小 3 和余数 2,这意味着前面 2 个组将获得一个附加行(每个组中有 4 行),而第三个组则不会得到附加行(该组中有 3 行)。组号(tile 号)1 被分配给行 1 到 4,组号 2 被分配给行 5 到 8,组号 3 被分配给行 9 到 11。通过该信息可以生成直方图,并且将项目均匀分布到每个梯级。在我们的示例中,之一个梯级表示具有更高得分的演讲者,第二个梯级表示具有中等得分的演讲者,第三个梯级表示具有更低得分的演讲者。可以使用 CASE 表达式为组号提供说明性的有意义的备选含义:

Code
SELECT speaker, track, score,
CASE NTILE(3) OVER(ORDER BY score DESC)
WHEN 1 THEN 'High'
WHEN 2 THEN 'Medium'
WHEN 3 THEN 'Low'
END AS scorecategory
FROM SpeakerStats

以下为结果集:

speaker    trackscore scorecategory
---------- ---------- ----------- -------------
KevinDB   7     Medium
Mike DB   8     Medium
Suzanne    DB 9     High
Jessica    Dev 9     High
Joe  Dev  6     Low
Robert     Dev 6     Low
Ron  Dev 9     High
BrianSys 7     Medium
Dan  Sys3     Low
KathySys8     High
Michele    Sys8     Medium

上一篇 返回首页 下一篇

声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

别人在看

电脑屏幕不小心竖起来了?别慌,快捷键搞定

Destoon 模板存放规则及语法参考

Destoon系统常量与变量

Destoon系统目录文件结构说明

Destoon 系统安装指南

Destoon会员公司主页模板风格添加 ***

Destoon 二次开发入门

Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

IT头条

Synology 更新 ActiveProtect Manager 1.1 以增强企业 *** 弹性和合规性

00:43

新的 Rubrik Agent Cloud 加速了可信的企业 AI *** 部署

00:34

宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

00:21

Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

02:05

投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

01:18

技术热点

大型网站的 HTTPS 实践(三):基于协议和配置的优化

ubuntu下右键菜单添加新建word、excel文档等快捷方式

Sublime Text 简明教程

用户定义SQL Server函数的描述

怎么在windows 7开始菜单中添加下载选项?

SQL Server 2016将有哪些功能改进?

IT技术网 版权所有 © 2020-2025京ICP备14047533号-20,Power by OK设计网

在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/22471.html

分享给朋友:

“详解SQL Server 2005四种排名函数(1)” 的相关文章

Windows7播放电影视频蓝屏无论什么格式都会蓝屏

Windows7播放电影视频蓝屏无论什么格式都会蓝屏

问:我在Windows 7 Ultimate X64下播放电影视频时,不管什么格式都会蓝屏,错误代码“0x00000124”。换解码器、播放器不行,换驱动、内存也不管用。在不同的电脑上也试过,仍然蓝屏。请问是哪里的问题,如何解决 答:64位 Windows 7直接使用PotPlayer x64就...

Windows7启动后连上了网但网络图标不停转圈怎么办

Windows7启动后连上了网但网络图标不停转圈怎么办

Windows 7电脑开机后,虽然连上了网络,但是网络图标却一直不停地转圈,这个问题该怎么修复呢?今天小编就告诉大家解决的方法吧。 解决方法: 1、假如是打补丁后出现的问题。 第一时间卸载驱动精灵,并且把它的文件夹彻底删除,要干净,用360粉碎! 2、开启network list ser...

windows 7任务栏右下角小三角按钮如何显示以便隐藏更多的程序图

windows 7任务栏右下角小三角按钮如何显示以便隐藏更多的程序图

当你的Windows 7系统在后台打开多个程序时,任务栏右下角往往会出现一排的图标,不但影响美观而且也没实用性。能不能让它像WinXP那样有一个可以隐藏后台程序的小三角图标呢 当然可以,Windows 7可是继承了WinXP许多优秀的功能,而且设置方法也非常简单。 操作方法: 1、在任务栏空白处...

在Ubuntu中如何安装Mapnik工具包以便开发Gis应用程序

在Ubuntu中如何安装Mapnik工具包以便开发Gis应用程序

Ubuntu系统操作中,因为开发Gis应用程序的需要,要在Ubuntu系统中安装Mapnik工具包,那么要如何安装Mapnik工具包呢?下面小编就给大家介绍下Ubuntu安装Mapnik工具包的步骤,感兴趣的朋友可以来了解下。 卸载旧的: sudo apt-get purge libmapn...

Ubuntu修改命令提示符PS1教程(非常详细)

Ubuntu修改命令提示符PS1教程(非常详细)

Ubuntu在使用命令的时候,有时需要修改命令提示符PS1,可很多人并不知道如何修改PS1,下面小编就给大家介绍下Ubuntu如何修改命令提示符PS1,一起来学习下吧。 命令多行输入不方便也不直观,要想修改这个命令提示符。修改~/.bashrc文件中的PS1即可。 PS1是主要的提示符设置,...

Win 7与vista的网络共享方法详解

Win 7与vista的网络共享方法详解

一般大部分人在Windows 7/Vista共享文件为了方便都去掉了密码保护的共享。这样在共享文件夹时就需要添加Everyone或Guest权限。一般共享文件夹时是以向导的形式,添加用户设置权限都很简单,不会有问题。但看到一些人共享驱动器时却遇到了问题。就是网上邻居能够看到共享的驱动器,访问却提示没...