这是表结构!
name varchar(10),
得分浮动
使用值:
('Alex',7),('john',5.6),('Tom',8.9),('Anonio',6),('sharti',7),('mamuzi',9)
我需要o / p
name score
mamuzi 9
Tom 8.9
Alex 7
sharti 7
当我尝试使用TOP
时:select top 3 * from table order by score desc
我无法获得预期效果
答案 0 :(得分:2)
除非您包含ORDER BY
语句,否则当您使用TOP时,排序将是随机的。
这样做:
SELECT TOP 3 WITH TIES * FROM YourTable ORDER BY score DESC
示例SQL Fiddle。
当TOP与ORDER BY子句一起使用时,结果 set仅限于前N个有序行数;否则,它 以未定义的顺序返回前N行。
编辑:只是注意到了示例数据的变化。为了使其工作,您需要将WITH TIES
子句添加到TOP,如其他答案中所指出的那样。我已相应更新了我的答案。
答案 1 :(得分:2)
尝试在sql server中使用with Ties
,因为Alex and sharti
具有相同的分数
select top 3 with ties * from #t order by score desc
答案 2 :(得分:0)
您忘记了 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
相同,您需要WITH TIES
建议使用Vijaykumar Hadalgi({{3对于WITH TIES)。
将您的查询修改为:SELECT TOP(3) WITH TIES * FROM @table ORDER BY score DESC
name score
--------------
mamuzi 9
Tom 8,9
Alex 7
sharti 7