【发布时间】:2015-09-03 06:19:00
【问题描述】:
我有一个表,其中有一个表示学生分数的 int 列。如果确实存在第二高分,我想选择第二高分,如果不存在,则返回null。想知道如何在 SQL 中实现。
我正在使用 MySQL/SQL Workbench。
【问题讨论】:
-
从长远来看,我不相信这种持续用勺子喂食会对您有所帮助。您必须自己努力学习和解决这些问题
我有一个表,其中有一个表示学生分数的 int 列。如果确实存在第二高分,我想选择第二高分,如果不存在,则返回null。想知道如何在 SQL 中实现。
我正在使用 MySQL/SQL Workbench。
【问题讨论】:
如果存在,此查询将返回第二高的值,否则为 NULL
SELECT MAX(score)
FROM table_name
WHERE score<>(
SELECT MAX(score)
FROM table_name);
【讨论】:
请尝试执行以下 sql 查询以检索第二高分
SELECT score from table order by score desc limit 1,1
以上查询如果存在则返回第二高分,如果记录不存在则返回NULL
【讨论】:
当有前 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 的前两条记录,然后选择了第二条记录..
如果不存在则显示为空
【讨论】:
尝试以下查询
SELECT max(score) FROM table WHERE score NOT IN (SELECT max(score) FROM table);
或
SELECT max(score) FROM table WHERE score
【讨论】:
我正在考虑如何显示第 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 个最高值。
【讨论】: