摘自:

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

  1. sql select 语句_学习SQL:SELECT语句

    sql select 语句 The SELECT statement is probably the most important SQL command. It's used to return r ...

  2. SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例

    原文:SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例 sql server 安装第一个实例,默认实例的端口是1433,   一个库中如果有多个实例, 从第二个实例开始的端口是动态端口,需 ...

  3. [推荐推荐][提供下载]ORACLE SQL:经典查询练手系列文章收尾(目录篇)

    [推荐推荐][提供下载]ORACLE SQL: 经典查询练手系列文章收尾(目录篇) --通过知识共享树立个人品牌. 通过近一个月的努力,<经典查询练手系列>也快告一段落,但并不代表结束,以 ...

  4. SQL:插入指定标识列的数据时候的小错误

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 后期会在博客首发更新:http://dnt.dkill.net 好久没写标识系 ...

  5. 复杂查询练习_《从零学会SQL:简单查询》第二关 简单查询

    本文分为如下六部分: 基本查询语句 指定查询条件 注释和SQL语句注意事项 运算符 字符串模糊查询 练习 所用数据表请参见前文: 陈策:<从零学会SQL:入门>第一关 入门​zhuanla ...

  6. 【项目实战】SQL :部门花名册PBI展示

    SQL :部门花名册PBI展示 编号 姓名 部门 职位 联系方式 性别 生日 住址 id(标识列) name dept position mobile gender birth_date addres ...

  7. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)

    Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例

  8. Database之SQL:SQL之over partition by开窗函数的简介、使用方法(求各班级内各自排名/求各班级内第一名/求各班级内分数递增和等案例解析)之详细攻略

    Database之SQL:SQL之over partition by开窗函数的简介.使用方法(求各班级内各自排名/求各班级内第一名/求各班级内分数递增和等案例解析)之详细攻略 目录 over part ...

  9. Sql:成功解决将sql输出的datetime时间格式转为常规格式

    Sql:成功解决将sql输出的datetime时间格式转为常规格式 目录 SQL应用案例 1.将sql输出的datetime时间格式转为常规格式 SQL应用案例 1.将sql输出的datetime时间 ...

  10. SQL:使用备份向导、SQL命令、导出数据三种方式对已建立的数据库进行备份

    SQL:使用备份向导.SQL命令.导出数据三种方式对已建立的数据库进行备份 目录 题目要求 解题步骤 题目要求 使用备份向导备份数据库 "DEMO_4_2_2_1"到考生文件夹&q ...

最新文章

  1. java c 解决方案_Java jdk安装及javac命令无效解决方案
  2. ABP理论学习之多租户
  3. 课时 28:理解容器运行时接口 CRI(知谨)
  4. oracle如何复制表的索引,Oracle表与索引管理
  5. matplotlib柱状图、面积图、直方图、散点图、极坐标图、箱型图
  6. [vue] 有使用过vue吗?说说你对vue的理解
  7. Python reload() 函数
  8. python3 判断文件是否存在_Python判断文件是否存在的三种方法
  9. pandas 非聚合函数
  10. hibernate 的一对多关联关系映射配置
  11. Codeforces 817F MEX Queries
  12. python处理excel的优势-推荐一款数据处理的神级工具,完全结合了Python和Excel的优势...
  13. 面向对象银角大王补充2-self就是调用当前方法的对象-静态字段,公有属性-封装的理解-继承的理解,普通方法,静态方法...
  14. python扩展库xlwt支持对_python第三方库——xlrd和xlwt操作Excel文件学习
  15. 智力问答选择题_智力问答题
  16. ubuntu 版mysql客户端工具_ubuntu安装mysql可视化工具MySQL-workbench及简单操作
  17. 创作短视频怎么去除素材水印?
  18. 祈澈姑娘:为自己代盐
  19. 可汗学院公开课:统计学笔记——假设检验
  20. Java项目:SSM汽车维修管理系统源码

热门文章

  1. 有一种单身叫宁缺勿滥 -- 纪念百年神棍节
  2. P2504 聪明的猴子
  3. 基于JDE的目标跟踪算法前沿研究跟进
  4. 标准差(Standard Deviation) 和 标准误差(Standard Error)
  5. ML-Agents 安装配置 【ML-Agents 官方文档翻译(ML-Agent 1.9.1,Unity 2018-2020)】
  6. 腾达便携无线路由 无法建立到192.168.2.1的服务器连接,Tenda腾达路由器5G信号设置步骤...
  7. CSS 文字背景水印
  8. UCenter+云市场?开源用户中心2.0时代即将开启
  9. 塑料填充母粒行业调研报告 - 市场现状分析与发展前景预测
  10. 人纪--针灸---------12.7开始