sql server 2005中with ties的使用

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

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最多的使用就应该是用在计算最高分上,在别的方面的应用,还真有没有想到.

 


你可能感兴趣的:(sql,c,object,server,null,table,insert)