偶遇with ties
2010-03-29 22:18 by 吴秦, 4899 阅读, 11 评论, 收藏, 编辑
今天在园子里看了关于索引的一道经典面试题,讲了这样一个问题“从100万条记录中的得到成绩最高的记录”。看到这个题目,通常我们的做法是:
select top 1 * from student order by score desc
但是这样做你会发现,如果有几个人分数并列第一,这样就只能取到一个记录。用下面的代码的话,就可以正确地取出分数第一的所有记录:
select top 1 with ties * from student order by score desc
由于以前没有用过with ties ,看到这个比较新奇,故随后MSDN,Google,Baidu之。
WITH TIES
指定从基本结果集中返回额外的行,对于 ORDER BY 列中指定的排序方式参数,这些额外的返回行的该参数值与 TOP n (PERCENT) 行中的最后一行的该参数值相同。只能在 SELECT 语句中且只有在指定了 ORDER BY 子句之后,才能指定 TOP...WITH TIES。
注意:返回的记录关联顺序是任意的。ORDER BY 不影响此规则
来源:MSDN,http://msdn.microsoft.com/zh-cn/library/ms189463.aspx
MSDN中指出这些额外的返回行的参数值与TOP n(PERCENT)行中的最后一行的该参数值相同。这个地方该怎么理解呢?其实是如果按照order by 参数排序TOP n(PERCENT)返回了前面n(pencent)个记录,但是n+1…n+k条记录和排序后的第n条记录的参数值(order by 后面的参数)相同,则n+1、…、n+k也返回。n+1、…、n+k就是额外的返回值。
举个例子,假设有如下记录:
studentID | courseName | score |
09212744 | 数据库 | 90 |
09212745 | 数据库 | 90 |
09212746 | 数据库 | 90 |
09212750 | 数据库 | 85 |
09212719 | 数据库 | 84 |
09212720 | 数据库 | 80 |
09212742 | 数据库 | 80 |
09212751 | 数据库 | 75 |
09212755 | 数据库 | 74 |
09212740 | 数据库 | 70 |
select top 6 * from student order by score desc
将返回如下结果:
图1 不带with ties(注意最后一条记录)
select top 6 with ties * from student order by score desc
将返回如下结果:
图2 带with ties(多了第7条记录)
结果一目了然,不用多解释!
插曲:其实在这个过程中有个小插曲,我首先是Google “with ties” 搜到了这篇文章With Ties on SQL Server 2005。内容如下(翻译之后):
SQL Server 2005有一个功能来选择top记录,但是我要说的是,我希望同样的数量将被加载。举例来说,我想从表中记录选择前5名的货币汇率,但是如果其中一个记录有相同的值,不要让算作前5名。通过下面的例子来证明。
- select top 5 * from batch where module = ‘CA’ order by curyrate desc
BatNbr CuryRate
000345 9900
000350 9900
000351 9900
000400 9800
000450 9750
如果你看结果,你会看到9900被加载了3次,让我们看看如果运行下面的脚步。
- select top 5 with ties * from batch where module = ‘CA’ order by CuryRate desc
BatNbr CuryRate
000345 9900
000350 9900
000351 9900
000400 9800
000450 9750
000451 9750
000475 9500
000456 9400
这就是With Ties on SQL Server 2005的全部内容,这导致我对with ties理解错误!认为加上with ties后,会返回除了重复的记录会返回n条记录,还一直认为是MSDN解释错了(⊙﹏⊙b汗)。而且这篇文章被许多人装载了,博客园和csdn都有,不知道我对那片文章理解错了还是他本来就错了。如果是我理解错了,请告诉我,谢谢!
本文转自吴秦博客园博客,原文链接:http://www.cnblogs.com/skynet/archive/2010/03/29/1700055.html,如需转载请自行联系原作者
偶遇with ties相关推荐
- R语言警告:Cannot compute exact p-value with ties的处理方法
R语言警告:Cannot compute exact p-value with ties的处理方法 一.问题 [1] "检验Spearman相关性的显著性为:" Warning i ...
- 在车上偶遇一位阿里大佬
技术.业务.跳槽.面试,全都聊了,分享给大家! 大家好,我是鱼皮. 要回上海了,在汽车上本来想闭目养神一下,没想到却偶遇了一位技术 Leader 级别的阿里大佬.作为小辈,有很多问题想向大佬请教,就聊 ...
- SQL语句中的TOP(expression) [PERCENT] [WITH TIES] 用法
TOP(expression) [PERCENT] [WITH TIES] expression : 指定返回行数的数值表达式.如果指定了PERCENT,则expression默认转换为FLOAT值, ...
- 马斯克光顾北京包子铺被偶遇 本人盖章:好吃!
上周,特斯拉CEO埃隆·马斯克来中国出席2019年世界人工智能大会.在会上同联合国数字合作高级别小组共同主席马云展开了的"双马对话"引起海内外网友的广泛关注. 去年7月来华时,马斯 ...
- 上车,在北京地铁10号线偶遇一下
编辑部 发自 10号线 量子位 报道 | 公众号 QbitAI 这是一则号外推送. 感谢你长久以来的关注. 曾有你们中的某一位私信比喻,说量子位是一辆开往AI的地铁,表扬我们高效.稳定,日复一日不倦 ...
- java路上偶遇占小狼
走进java世界 记得那是一个无聊的周末,因为在家待业,所以就在各大招聘平台投递了一些简历,那时候的我还是一个职场新人,却不知这些招聘者用的一些骗术,突然有个女孩儿给我打电话说招java工程师,包教包 ...
- set Assigning an instance of ‘esri.***‘ which is not a subclass of ‘esri.***‘错误偶遇
//偶遇arcgis api这个错误 set Assigning an instance of 'esri.***' which is not a subclass of 'esri.***' 反复查 ...
- “偶遇” 爱可生 与 MYSQL 大型应用
今天"偶遇" 爱可生的技术人员,经过了两个小时的交流,又重塑的我对大型系统中对MYSQL 的应用, 这绝对不是广告,这绝对不是广告,这绝对不是广告,重要的还的说几遍. 为什么心甘情 ...
- 【日常吐槽 · 第八期】adb偶遇fooView
[日常吐槽 · 第八期]adb偶遇fooView By EOS. 很酷的一个软件 周五发现了一个叫fooView的软件,感觉很是新奇,鼓捣了一下,感觉还不错, 因为我的手机是带底部虚拟导航栏的,所以感 ...
- 钓鱼网站php,偶遇钓鱼网站的一次代码审计
偶遇一个钓鱼邮件中的钓鱼网站,并与年华大佬做了代码审计.据说近期全国出现多起钓鱼邮件事件,主要以各大高校为主,已有不少人上当,还需多加注意. 分析钓鱼网站 钓鱼网站采用常用空间钓鱼CMS搭建,可通过百 ...
最新文章
- Arrays.asList问题
- 子网掩码、掩码长度关系
- 感觉小轿车要比SUV舒服,为什么很多人还是选择了SUV?
- 突然发现Windows 7 Ultimate中有个BUG,分享一下哈!
- .net Core 3.1下的Roslyn 动态编译
- 5年 Android 面试题
- 5.3.4—二叉查找树—Convert Sorted Array to Binary Sear Tree
- ORACLE 碎片整理小结
- 软件项目管理复习(一-七章)
- (三)安装seafile服务器
- VS code 显示中文异常解决办法
- 计算机桌面怎么全屏显示,电脑显示器如何设置全屏 把电脑屏幕调成满屏的方法有哪些...
- python学习------面向对象的程序设计
- 网易前端微专业,JavaScript程序设计:JS调试
- 哈佛女校长给2008年本科毕业生的演讲
- CPU与GPU统一虚拟内存(CUDA UM)原理
- Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
- 图解DPU智能网卡,各种网络卸载细节
- python如何打印_python如何打印
- Linux截图和屏幕视频录制软件Kazam
热门文章
- eclipse 64位 免安装_超详细:64位Linux下安装PS模拟器ePSxe
- MPG4 MP42 MP43: Microsoft MPEG-4 versions 1, 2, and 3
- nginx proxy_pass 502 这是什么错误?
- 使用海龟绘图,输出四个不同颜色矩形
- 如何去掉快捷方式上的小箭头
- c语言程序设计数独,C语言求解数独
- Android11.0 默认开启WLAN热点设置默认热点名称和密码
- 职中选什么专业好_职中选什么专业最有前途
- 【软件分析/静态程序分析学习笔记】5.数据流分析基础(Data Flow Analysis-Foundations)
- 在html中书名号怎么写,html范本