【问题标题】:Get second max highest mark and name获得第二个最高分和名字
【发布时间】:2019-06-23 07:38:58
【问题描述】:

考虑一个包含两列的表:markname

我需要获取第二高的值,以及第二高的名称。

【问题讨论】:

标签: sql


【解决方案1】:
SELECT * 
FROM   (SELECT name, 
               mark, 
               Row_number() over(ORDER BY mark DESC) AS rownums 
        FROM   employees) 
WHERE  rownums = 2;

【讨论】:

【解决方案2】:
SELECT name,mark FROM table ORDER BY mark desc limit 1,1

此代码按mark 降序对所有记录进行排序。 limit 1,1 跳过第一个结果(第一个 1 = 第一个记录),然后返回下一个结果(第二个 1 = 第二个记录)。

【讨论】:

    【解决方案3】:

    您可以在 SQL 中使用 ROW_NUMBER()、RANK()、DENSE_RANK() 函数。 但在这种情况下,您必须使用 DENSE_RANK(),因为可能存在 2 个或更多学生可能获得最高分的情况,在这种情况下,您不能使用 ROW_NUMBER() 或 RANK()。

    了解更多关于这个函数click here

    SELECT * FROM (
        SELECT name, mark, DENSE_RANK() over (order by mark desc) RankNo 
        FROM tablename
        ) AS Result 
    WHERE Result.RankNo = 2
    

    【讨论】:

    • 我会删除[RankNo] 中的括号以获得标准的SQL 查询。您可以将其设为 AS RankNo 以使其更具可读性。
    • 实际上我使用的是 [Rank] 但后来我认为在方括号下使用关键字会误导他。无论如何感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 2011-09-01
    • 1970-01-01
    • 2018-08-08
    • 2018-01-18
    • 2010-10-04
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多