Sql server 选择前三名未扩展结果?

Sql server 选择前三名未扩展结果?,sql-server,tsql,Sql Server,Tsql,这是桌子结构 名称varchar(10) 分数浮动 价值观: ('Alex',7),('john',5.6),('Tom',8.9),('Anonio',6),('sharti',7),('mamuzi',9) 我需要订单 name score mamuzi 9 Tom 8.9 Alex 7 sharti 7 当我尝试使用TOPas:从表order by score desc中选择TOP 3*时我无法获得预期结果除非包含order by语句,否则使用TOP时顺序将是随机的 这

这是桌子结构

名称varchar(10)

分数浮动

价值观:

('Alex',7),('john',5.6),('Tom',8.9),('Anonio',6),('sharti',7),('mamuzi',9)
我需要订单

name    score
mamuzi  9
Tom 8.9
Alex    7
sharti  7

当我尝试使用
TOP
as:
从表order by score desc中选择TOP 3*时
我无法获得预期结果

除非包含
order by
语句,否则使用TOP时顺序将是随机的

这样做:

SELECT TOP 3 WITH TIES * FROM YourTable ORDER BY score DESC
样品

从:

当TOP与ORDERBY子句一起使用时,结果 集合限制为前N个有序行;否则, 按未定义的顺序返回前N行数


编辑:刚刚注意到示例数据中的更改。如其他答案所述,要使其立即生效,您需要在顶部添加
WITH TIES
子句。我已经相应地更新了我的答案。

除非您包含
ORDER BY
语句,否则使用TOP时,排序将是随机的

这样做:

SELECT TOP 3 WITH TIES * FROM YourTable ORDER BY score DESC
样品

从:

当TOP与ORDERBY子句一起使用时,结果 集合限制为前N个有序行;否则, 按未定义的顺序返回前N行数


编辑:刚刚注意到示例数据中的更改。如其他答案所述,要使其立即生效,您需要在顶部添加
WITH TIES
子句。我已经相应地更新了我的答案。

尝试在sql server中使用带领带的
,因为
Alex和sharti的分数相同

select top 3 with ties * from #t order by score desc

尝试在sql server中使用带有Ties的
,因为
Alex和sharti的分数相同

select top 3 with ties * from #t order by score desc
您忘记了按
score
字段排序。将查询修改为:

SELECT TOP 3 * FROM table ORDER BY score DESC

回答您问题的最后一次编辑:使用
TOP
ORDER BY DESC
对我有效,但我使用您添加到问题中的新值进行了测试。我的测试如下:

DECLARE @table TABLE
(
  name varchar(10),
  score float
) 

INSERT INTO @table VALUES ('Alex', 7)
INSERT INTO @table VALUES ('john',5.6)
INSERT INTO @table VALUES ('Tom',8.9)
INSERT INTO @table VALUES ('Anonio',6)
INSERT INTO @table VALUES ('sharti',7)
INSERT INTO @table VALUES ('mamuzi',9)

SELECT TOP 3 * FROM @table ORDER BY score DESC
由于结果与预期一致,因此它是有效的

要在结果中包括
sharti
和他的分数,因为他与
Alex
的分数相同,您需要按照建议使用
搭配领带
(搭配领带)

将您的查询修改为:
从@table ORDER BY score DESC中选择带领带*的前三名

name    score
--------------
mamuzi  9
Tom     8,9
Alex    7
sharti  7
您忘记了按
score
字段排序。将查询修改为:

SELECT TOP 3 * FROM table ORDER BY score DESC

回答您问题的最后一次编辑:使用
TOP
ORDER BY DESC
对我有效,但我使用您添加到问题中的新值进行了测试。我的测试如下:

DECLARE @table TABLE
(
  name varchar(10),
  score float
) 

INSERT INTO @table VALUES ('Alex', 7)
INSERT INTO @table VALUES ('john',5.6)
INSERT INTO @table VALUES ('Tom',8.9)
INSERT INTO @table VALUES ('Anonio',6)
INSERT INTO @table VALUES ('sharti',7)
INSERT INTO @table VALUES ('mamuzi',9)

SELECT TOP 3 * FROM @table ORDER BY score DESC
由于结果与预期一致,因此它是有效的

要在结果中包括
sharti
和他的分数,因为他与
Alex
的分数相同,您需要按照建议使用
搭配领带
(搭配领带)

将您的查询修改为:
从@table ORDER BY score DESC中选择带领带*的前三名

name    score
--------------
mamuzi  9
Tom     8,9
Alex    7
sharti  7

@是的。但解决方案是一样的。什么abt record
shrati 7
共享相同的分数?7所以在这种情况下,顺便说一句,这里有一条领带2,所以你需要用
来代替领带
@VijaykumarHadalgi如果你是对的,OP要求得到扩展结果。谢谢你pointing@user2841280是的。但解决方案是一样的。什么abt record
shrati 7
共享相同的分数?7所以在这种情况下,顺便说一句,这里有一条领带2,所以你需要用
来代替领带
@VijaykumarHadalgi如果你是对的,OP要求得到扩展结果。谢谢指点