SQL:with ties
摘自:
http://www.cnblogs.com/huanghai223/archive/2010/10/26/1861961.html
“从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都要,不知道我对那片文章理解错了还是他本来就错了。如果是我理解错了,请告诉我,谢谢!
------------>>>
SQL:with ties的更多相关文章
- SQL:插入指定标识列的数据时候的小错误
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系 ...
- Linq to Sql:N层应用中的查询(上) : 返回自定义实体
原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使 ...
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候, ...
- SQL Server with ties 语句
With ties 语句是与top.order by 语句联合使用的语句:我们在实际查询过程中会遇到这样的情况,比如查询考试为前三名的学生信息,发现有并列第三的情况,如果我们只是top 3 发现并列第 ...
- 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)
原文:监控SQL:执行表中所有sql语句.记录每个语句运行时间(3) 通过执行一个 带参数的存储过程 exec OpreateTB('OpreateUser','IsRun') 更新表的数据 表 ...
- 监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)
原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2) 在有些公司中,由于管理的不规范,或者是便于开发人员直接修改.部署程序,往往任何开发人员,都能登录到生产 ...
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- SQL:利用多表更新优化子查询
原SQL: update bi_data.order_list_wxset is_start='1',proc_time=now()where 1=1and is_end='0' and 交易时间&l ...
随机推荐
- ss 公共代理的必要设置(转)
转: https://gist.github.com/fqrouter/95c037f9a3ba196fd4dd 本文只关注于确保ss服务还“活着”,如果你希望让其跑得更快,请参考 https://g ...
- php防盗链,php ci在control里面控制除了自己站内的链接点击跳转,其他来源的都跳到站内页面
php防盗链,php ci在control里面控制除了自己站内的链接点击跳转,其他来源的都跳到站内页面 $route['jump/(:any)/(:any)'] = "index/jump/ ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.5.SportsStore一个真实的程序
我们要建造的程序不是一个浅显的例子.我们要创建一个坚固的,现实的程序,坚持使它成为最佳实践.与Web Form中拖控件不同.一开始投入MVC程序付出利息,它给我们可维护的,可扩展的,有单元测试卓越支持 ...
- 使用glob()查找文件
大部分PHP函数的函数名从字面上都可以理解其用途,但是当你看到 glob() 的时候,你也许并不知道这是用来做什么的,其实glob()和scandir() 一样,可以用来查找文件,请看下面的用法:摘自 ...
- 《深入浅出MFC:》
callback函数必须是static的,才能去除隐藏的this指针.
- mysql高可用之PXC(Percona XtraDB Cluster)
简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1).同步复制,事务要么在所有节点提交或不提交 ...
- android 6.0权限处理
在模拟器测试好的程序,运行在mate8上面一直崩,经多方查探才找到以下博文,方法还没掌握,但也算是找到原因了: http://***/article/android-6-0-runtime-permi ...
- [团队项目]第二个冲刺 看板和燃尽图 Sprint2 6.8/6.9/6.10/6.11/6.12/6.13/6.14
1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 按照以下过程进行 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Bac ...
- Inviting Friends(二分+背包)
Inviting Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- wamp安装完更改关联浏览器
"wampmanager.conf"文件修改的是关于中到官网的链接打开方式. "wampmanager.ini"修改的是左键菜单的打开方式. 修改完无效的话重启 ...