【问题标题】:In SQL, I need to generate a ranking (1st, 2nd, 3rd) column, getting stuck on "ties"在 SQL 中,我需要生成一个排名 (1st, 2nd, 3rd) 列,卡在“tie”上
【发布时间】:2014-05-19 14:54:53
【问题描述】:

我有一个查询,它根据多个条件计算点,然后根据这些点对结果集进行排序。

SELECT * FROM (
    SELECT
         dbo.afunctionthatcalculates(Something, Something) AS Points1
        ,dbo.anotherone(Something, Something) AS Points2
        ,dbo.anotherone(Something, Something) AS Points3
        ,[TotalPoints] = dbo.function(something) + dbo.function(something) 
) AS MyData
ORDER BY MyData.TotalPoints 

所以我第一次尝试添加展示位置、排名……是这样的:

SELECT ROW_NUMBER() OVER(MyData.TotalPoints) AS Ranking, * FROM (
    SELECT same as above
) AS MyData
ORDER BY MyData.TotalPoints

这会添加排名列,但在积分相同时不起作用。

Rank  |  TotalPoints
--------------------
1        100
2        90
3        90
4        80

应该是:

Rank  |  TotalPoints
--------------------
1        100
2         90
2         90
3         80

不太清楚如何解决这个问题。

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-server-2012


    【解决方案1】:

    您应该使用DENSE_RANK() 函数,该函数将关系考虑在内,如下所述:http://msdn.microsoft.com/en-us/library/ms173825.aspx

    【讨论】:

    • 天哪!真的这么简单吗?最酷的答案和修复......太容易了。谢谢!
    【解决方案2】:

    DENSE_RANK() 而不是 ROW_NUMBER()

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2022-11-04
      • 2020-10-12
      • 1970-01-01
      • 2011-07-12
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多