【问题标题】:how to check if there exists 2nd highest score in SQL?如何检查SQL中是否存在第二高分?
【发布时间】:2015-09-03 06:19:00
【问题描述】:

我有一个表,其中有一个表示学生分数的 int 列。如果确实存在第二高分,我想选择第二高分,如果不存在,则返回null。想知道如何在 SQL 中实现。

我正在使用 MySQL/SQL Workbench。

【问题讨论】:

  • 从长远来看,我不相信这种持续用勺子喂食会对您有所帮助。您必须自己努力学习和解决这些问题

标签: mysql sql


【解决方案1】:

如果存在,此查询将返回第二高的值,否则为 NULL

SELECT MAX(score)
FROM table_name
WHERE score<>(
SELECT MAX(score)
FROM table_name);

【讨论】:

  • @Mattew,我试过你的代码,它可以工作。如果表中只有一条记录,它将返回 Null。我认为您的代码与鲁宾的代码相同,但是当表中只有一条记录时,他的代码什么也不返回。你知道为什么回报不一样吗?
【解决方案2】:

请尝试执行以下 sql 查询以检索第二高分

SELECT score from table order by score desc limit 1,1

以上查询如果存在则返回第二高分,如果记录不存在则返回NULL

【讨论】:

  • 感谢您的快速响应,在您的逻辑中,您的意思是逻辑上第二高分不存在?这是否意味着所有学生的分数都一样?
  • 分数可能重复,不确定您的代码是否能处理这种情况?
  • @LinMa 不,它只会返回按分数降序排列的第二高分
  • @LinMa 这将产生一个包含第二高分的结果,如果每个学生的分数相同,它将返回相同的值
  • @LinMa 因为行索引从0开始,所以限制为1,1
【解决方案3】:

当有前 2 个最高分时,将显示第二个 否则,即:如果它在整个表格中具有单个最大值,则它显示为 null..

select top 1 case when row_number() over (order by tbl.score asc) =2 then a else null end ,row_number() over (order by tbl.score asc) as ranks from (

select  top 2 score from table group by score  order by 1 desc

)tbl
order by 1 desc

我选择了 desc 的前两条记录,然后选择了第二条记录..

如果不存在则显示为空

【讨论】:

  • 感谢您的回复,按照您的逻辑,您的意思是逻辑上第二高分不存在?这是否意味着所有学生的分数都一样?
  • 虽然此代码可以回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期价值。
  • 同意@FrancescoMenzani。 koushik veldanda,如果您能为您的代码澄清更多内容,我将不胜感激,我仍然对您的代码感到有些失落。 :)
【解决方案4】:

尝试以下查询

SELECT max(score) FROM table WHERE score NOT IN (SELECT max(score) FROM table);

SELECT max(score) FROM table WHERE score

【讨论】:

    【解决方案5】:

    我正在考虑如何显示第 n 个最高值,而不仅仅是第 2 个。我们可以使用最小代码而不是最大值。

    Select * from employee where salary= (Select min(salary) from (select * from employee order by salary desc limit 2) as MyTop);
    

    这可以通过仅将 desc 限制更改为所需的“第 n 个”来修改为所需的任何第 n 个最高值。

    【讨论】:

    • 有时子选择不是最好的解决方案
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多