偶遇with ties

2023-10-10 08:08
文章标签 ties 偶遇

本文主要是介绍偶遇with ties,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

偶遇with ties

2010-03-29 22:18 by 吴秦, 2338 阅读, 10 评论, 收藏, 编辑

今天在园子里看了关于索引的一道经典面试题,讲了这样一个问题“从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
将返回如下结果:
image 
图1 不带with ties(注意最后一条记录)
select top 6 with ties * from student order by score desc

将返回如下结果:

image

图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/
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接).

这篇关于偶遇with ties的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179148

相关文章

jdk8 sorted 排序值comparing 和thenComparing 偶遇问题解析

在java8之前,排序有两种方法: 1.定义比较器类 继承Comparator接口,然后重写compare(a,b) 方法,返回的结果是int类型  0  代表 a==b 1 代表 a>b -1 代表 a<b 2.定义比较器对象 Comparator<Person> c1 = new Comparator<Person>() {@Overridepublic int compare(P

排查IOException Broken pipe 错误,偶遇国外小哥

大家好,我是阿飞云 怕什么真理无穷,进一步有近一步的欢喜 今天我们聊一个异常:java.io.IOException: Broken pipe,为什么会报这个异常,这个异常要怎么解决?以及最后偶遇外国小哥~ 问题描述 最近遇到的一个小问题,希望对你有帮助。前几日在排查一个问题的时候,看到有几台服务器上日志偶发会打印这个错误 Caused by: java.io.IOException: Brok

1487 C. Minimum Ties

题意 n支队伍,两两之间有一场比赛,胜利者+3分,平局都+1分,失败+0分,如何构造出每队的得分都相同且让平局的场次尽可能的小 解析 每个人输赢必须相同,因此考虑对半思考问题。 对于队伍数目为 n n n,分类讨论 如果是奇数的个数,那就非常好办了,取窗口大小为 [ n 2 ] [\frac{n}{2}] [2n​]向后滑动,处在窗口的前一般部分是失败后一半是胜利 如果是偶数的话,可以

C-偶遇行军蚁(遇到过的题,做个笔记)

我的代码: 思路就是把每一行看成一个字符串,然后逐渐增加字符就行 #include <iostream>#include <vector>using namespace std;int main(){string s;int n;cin >> n; //读入行数cin >> s; //读入字符串vector<string>arr(n); //定义stri

[生活]中关村偶遇开复

上午11点多去了中关村图书大厦,起初只是准备淘几本技术方面的书,还没走到四楼的技术专柜,却听到了李开复签名售书的通知,马上拍马杀到大厦外。在一个拐角处发现有一百来号人在排队等待,大部份是学生模样的年轻人,手捧着一叠开复的新书<<世界因你不同--李开复自传>>。        等了半小时左右的时间,还在排队过程中买了本书,终于在一个演讲厅里看到了敬爱的开复了。 他坐在讲台上,旁边站着几个年轻人。

学习python的第12天,今天偶遇她成功了

刚从婚恋相亲公司签完合同回来,写完这篇博客就得赶紧忙他们的项目了。 按理来说,给客户做软件软件这条路只适合用来混口饭吃,看来咱家还得开发自己的产品才行。 自己的其实有比较看好的产品了,往后绝对要腾出大量的时间为自己的未来着想,不能光想着眼前。 我害怕,未来恋人和我走进婚姻时,因为没钱,因为没钱离开咱家,女人是现实的动物,大家伙公认的。 我害怕,人到中年,依旧为了活口而活,那年轻的时候在干嘛

偶遇

盛夏方晴景无倾, 白道当空雷轰鸣。 车外朦胧耳闻声, 骤雨加至伞无擎。   ------------ 下班时节偶逢雨,叹此时,方知吾身。 

8年前的一次偶遇

本文字数:1554字 阅读时间:4分钟 身边一些朋友时常会听我提起一个人,他三十出头,和我素未谋面,微信交流也不超过三句话,但我的公众号写作之旅就起源于他。 8年前的偶遇 8年前我上大二,那时候我还是一个头脑简单四肢发达的大学生,属于被人骗了还能帮人数钱的类型,每天的目标就是好好学习、锻炼好身体。 那时候刚好想学学 Android,在网上搜教程的时候,发现了一个博主写了一系列教程,并且关注了

异常“偶遇”之—— UnsupportedClassVersionError:Bad version number in .class file

今日在做系统补丁开发时,偶遇了一番UnsupportedClassVersionError错误。从异常栈信息来说,Bad Version number in .class file 已经是非常明确的指示!可惜的是,往往在实际当中,总是被一些表面东西遮盖了这个Error的真实面目,把简单复杂化了(造成这个问题多是IDE引起的, 哎,方便的同时,也在制造麻烦)。 Google了一番无疑都是指向同一个

偶遇只橘猫

今天打羽毛球休息的时候遇见一只野猫,叫它一声,就屁颠屁颠朝着我跑过来,用手摸摸它,还主动往我身上蹭,粘人石锤了!看它应该是饿了,朋友去买了根火腿肠,吃完之后就跑了????      再叫也不应,真是绝情,吃跑了就不理你,还是狗好,喂饱了会一直冲你摇尾巴,对你不离不弃! 2020年3月30日