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相关推荐

  1. R语言警告:Cannot compute exact p-value with ties的处理方法

    R语言警告:Cannot compute exact p-value with ties的处理方法 一.问题 [1] "检验Spearman相关性的显著性为:" Warning i ...

  2. 在车上偶遇一位阿里大佬

    技术.业务.跳槽.面试,全都聊了,分享给大家! 大家好,我是鱼皮. 要回上海了,在汽车上本来想闭目养神一下,没想到却偶遇了一位技术 Leader 级别的阿里大佬.作为小辈,有很多问题想向大佬请教,就聊 ...

  3. SQL语句中的TOP(expression) [PERCENT] [WITH TIES] 用法

    TOP(expression) [PERCENT] [WITH TIES] expression : 指定返回行数的数值表达式.如果指定了PERCENT,则expression默认转换为FLOAT值, ...

  4. 马斯克光顾北京包子铺被偶遇 本人盖章:好吃!

    上周,特斯拉CEO埃隆·马斯克来中国出席2019年世界人工智能大会.在会上同联合国数字合作高级别小组共同主席马云展开了的"双马对话"引起海内外网友的广泛关注. 去年7月来华时,马斯 ...

  5. 上车,在北京地铁10号线偶遇一下

    编辑部 发自 10号线  量子位 报道 | 公众号 QbitAI 这是一则号外推送. 感谢你长久以来的关注. 曾有你们中的某一位私信比喻,说量子位是一辆开往AI的地铁,表扬我们高效.稳定,日复一日不倦 ...

  6. java路上偶遇占小狼

    走进java世界 记得那是一个无聊的周末,因为在家待业,所以就在各大招聘平台投递了一些简历,那时候的我还是一个职场新人,却不知这些招聘者用的一些骗术,突然有个女孩儿给我打电话说招java工程师,包教包 ...

  7. 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.***' 反复查 ...

  8. “偶遇” 爱可生 与 MYSQL 大型应用

    今天"偶遇" 爱可生的技术人员,经过了两个小时的交流,又重塑的我对大型系统中对MYSQL 的应用, 这绝对不是广告,这绝对不是广告,这绝对不是广告,重要的还的说几遍. 为什么心甘情 ...

  9. 【日常吐槽 · 第八期】adb偶遇fooView

    [日常吐槽 · 第八期]adb偶遇fooView By EOS. 很酷的一个软件 周五发现了一个叫fooView的软件,感觉很是新奇,鼓捣了一下,感觉还不错, 因为我的手机是带底部虚拟导航栏的,所以感 ...

  10. 钓鱼网站php,偶遇钓鱼网站的一次代码审计

    偶遇一个钓鱼邮件中的钓鱼网站,并与年华大佬做了代码审计.据说近期全国出现多起钓鱼邮件事件,主要以各大高校为主,已有不少人上当,还需多加注意. 分析钓鱼网站 钓鱼网站采用常用空间钓鱼CMS搭建,可通过百 ...

最新文章

  1. Arrays.asList问题
  2. 子网掩码、掩码长度关系
  3. 感觉小轿车要比SUV舒服,为什么很多人还是选择了SUV?
  4. 突然发现Windows 7 Ultimate中有个BUG,分享一下哈!
  5. .net Core 3.1下的Roslyn 动态编译
  6. 5年 Android 面试题
  7. 5.3.4—二叉查找树—Convert Sorted Array to Binary Sear Tree
  8. ORACLE 碎片整理小结
  9. 软件项目管理复习(一-七章)
  10. (三)安装seafile服务器
  11. VS code 显示中文异常解决办法
  12. 计算机桌面怎么全屏显示,电脑显示器如何设置全屏 把电脑屏幕调成满屏的方法有哪些...
  13. python学习------面向对象的程序设计
  14. 网易前端微专业,JavaScript程序设计:JS调试
  15. 哈佛女校长给2008年本科毕业生的演讲
  16. CPU与GPU统一虚拟内存(CUDA UM)原理
  17. Visual Studio 2012 示例代码浏览器 - 数以千计的开发示例近在手边,唾手可得
  18. 图解DPU智能网卡,各种网络卸载细节
  19. python如何打印_python如何打印
  20. Linux截图和屏幕视频录制软件Kazam

热门文章

  1. eclipse 64位 免安装_超详细:64位Linux下安装PS模拟器ePSxe
  2. MPG4 MP42 MP43: Microsoft MPEG-4 versions 1, 2, and 3
  3. nginx proxy_pass 502 这是什么错误?
  4. 使用海龟绘图,输出四个不同颜色矩形
  5. 如何去掉快捷方式上的小箭头
  6. c语言程序设计数独,C语言求解数独
  7. Android11.0 默认开启WLAN热点设置默认热点名称和密码
  8. 职中选什么专业好_职中选什么专业最有前途
  9. 【软件分析/静态程序分析学习笔记】5.数据流分析基础(Data Flow Analysis-Foundations)
  10. 在html中书名号怎么写,html范本