sql server 2005中with ties的使用

本文深入分析了SQL with ties关键字在解决多个人取得相同最高分情况下的应用,通过实验展示了其功能,并提供了实践代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一个同事在群里说,有没有求一次考试最高分的好方法,大家一开始很鄙视的给出了

select top (1) * from table where examid=1 order by score desc

可是等过了不到一分钟,大家就反应过来,有一个问题,如果有多个人都打了最高分怎么办.当然就需求复杂一点的语句了.

其中一个同事,给出了.

select top (1) with ties * from table where examid=1 order by score desc

感觉很有意思,以前没有用过 with ties正好研究一下

with ties官方给出的定义是

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

下面我做了一个实验,看一下运行的结果


IF object_id('score') IS NOT NULL
 DROP TABLE score
 
 CREATE TABLE score
 (
   id int IDENTITY(1,1) PRIMARY KEY,
   CName varchar(30),
   StuCore int
     
)




INSERT INTO score(CName,stucore)values('A',100)
INSERT INTO score(CName,stucore)values('B',100)
INSERT INTO score(CName,stucore)values('C',60)
INSERT INTO score(CName,stucore)values('D',70)
INSERT INTO score(CName,stucore)values('E',50)
INSERT INTO score(CName,stucore)values('F',60)
INSERT INTO score(CName,stucore)values('G',70)
INSERT INTO score(CName,stucore)values('H',80)
INSERT INTO score(CName,stucore)values('i',40)
INSERT INTO score(CName,stucore)values('J',40)


UPDATE score SET stucore = 80 WHERE id=3



第一个:SELECT TOP (5)  CName,stucor  FROM score ORDER BY stucore desc

结果 : 

B	100
A	100
C	80
H	80
D	70

    SELECT TOP (5) WITH tie CName,stucore FROM score ORDER BY stucore desc

结果:

A	100
B	100
C	80
H	80
G	70
D	70

通过这个我们会发现,多了一行,就是同正常的最后一行,打70分的学生变成了2个.这就是with ties作用之处.

说实话,我感觉with ties最多的使用就应该是用在计算最高分上,在别的方面的应用,还真有没有想到.

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值