【问题标题】:SQL Server: position based on marksSQL Server:基于标记的位置
【发布时间】:2011-02-16 02:25:55
【问题描述】:

我使用的是 SQL Server 2008。我有一个 Student 表,其中包含以下字段: 1. StudentId,2. StudentName,3. Marks。 我想得到一个结果集,其中应该有一个名为“Position”的列。诸如“从学生中选择学生身份、学生姓名、分数、作为职位...”之类的内容,这样,根据学生的分数,我可以将它们评估为第 1、第 2 或第 20 位。如果学生的分数相同,那么他们的位置相同。 谢谢。 里斯

【问题讨论】:

    标签: c# .net tsql sql-server-2008


    【解决方案1】:

    使用RANK:

    如果两个或更多行并列排名,则每个并列的行获得相同的排名。例如,如果两个顶级销售人员具有相同的 SalesYTD 值,则他们都排名第一。具有次高销售额 YTD 的销售人员排名第三,因为有两行排名较高。因此,RANK 函数并不总是返回连续的整数。

    查询可能如下所示:

    SELECT
        StudentId,
        StudentName,
        Marks,
        RANK() OVER (ORDER BY Marks DESC) AS Position
    FROM Student
    

    【讨论】:

    【解决方案2】:

    您可以使用子查询来计算位置。这个位置只是比分数高的学生多一个:

    select
      s.StudentId, s.StudentName, s.Marks,
      Position = 1 + (select count(*) from Students m where m.Marks > s.Marks)
    from
      Students s
    

    【讨论】:

    • 感谢您的简单快速回答。它已经为我做到了。我还意识到上面 Mark Byers 建议的 DENSE_RANK() 函数也可以解决问题。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多