我有一个表,其中有一列表示学生的分数。如果确实存在第二高分,我想选择第二高分,如果不存在,则返回null。想知道如何在SQL中实现。
我正在使用MySQL / SQL Workbench。
答案 0 :(得分:2)
此查询将返回第二个最高值(如果存在)或 - 否则为NULL
SELECT MAX(score)
FROM table_name
WHERE score<>(
SELECT MAX(score)
FROM table_name);
答案 1 :(得分:1)
请尝试执行以下sql查询以检索第二高分
SELECT score from table order by score desc limit 1,1
上述查询将返回第二高分(如果存在)或 NULL (如果该记录不存在)
答案 2 :(得分:0)
如果排名前2位,则会显示第二位 另一个明智的方面是:如果它在整个表中具有单个最大值,则它显示为空...
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记录然后取得第二个记录..
如果不存在,那么它将显示为空
答案 3 :(得分:0)
尝试以下查询
SELECT max(score)FROM表WHERE得分不是IN(SELECT max(得分)FROM表);
OR
SELECT max(score)FROM表WHERE得分&lt; (SELECT max(score)FROM table);
答案 4 :(得分:0)
我在考虑如何显示第n个最大值而不是第2个最大值。我们可以使用最小代码而不是最大代码。
Select * from employee where salary= (Select min(salary) from (select * from employee order by salary desc limit 2) as MyTop);
可以通过仅将desc限制更改为所需的“ nth”来将其修改为所需的第n个最大值。