Sql server 选择前三名未扩展结果?
这是桌子结构 名称varchar(10) 分数浮动 价值观: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时顺序将是随机的 这
('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 recordshrati 7
共享相同的分数?7所以在这种情况下,顺便说一句,这里有一条领带2,所以你需要用来代替领带
@VijaykumarHadalgi如果你是对的,OP要求得到扩展结果。谢谢你pointing@user2841280是的。但解决方案是一样的。什么abt recordshrati 7
共享相同的分数?7所以在这种情况下,顺便说一句,这里有一条领带2,所以你需要用来代替领带
@VijaykumarHadalgi如果你是对的,OP要求得到扩展结果。谢谢指点