【问题标题】:select Top 3 unexpexted result?选择前 3 个意外结果?
【发布时间】:2014-02-25 10:03:04
【问题描述】:

这是表结构!

名称 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 时,我无法获得预期的结果

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

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

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

    See here

    【讨论】:

      【解决方案2】:

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

      这样做:

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

      示例SQL Fiddle

      来自documentation

      当 TOP 与 ORDER BY 子句结合使用时,结果 set 仅限于前 N 个有序行;否则,它 以未定义的顺序返回前 N 行。

      编辑:刚刚注意到您的示例数据发生了变化。要使其现在工作,您需要将 WITH TIES 子句添加到 TOP,正如其他答案中所指出的那样。我已经相应地更新了我的答案。

      【讨论】:

        【解决方案3】:

        您忘记了 订购方式 score 字段。将您的查询修改为:

        SELECT TOP 3 * FROM table ORDER BY score DESC
        

        回答您的问题的最后一次编辑:使用 TOPORDER 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 HadalgiMore 用于 WITH TIES)。

        将您的查询修改为:SELECT TOP(3) WITH TIES * FROM @table ORDER BY score DESC

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

        【讨论】:

        • @user2841280 我做到了。但解决方案是一样的。
        • 什么abt记录shrati 7它共享相同的分数仪式? 7 所以在这种情况下,btw 2 所以你需要使用 with ties 来代替!
        • @VijaykumarHadalgi 你是对的,OP 要求 extended 结果。谢谢指点
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 2014-09-21
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        相关资源
        最近更新 更多