从表中选择第二大且没有限制

时间:2010-10-19 10:01:19

标签: mysql sql select

如何在不使用LIMIT 的情况下从表中选择第二大标记或其他内容? 我知道有可能使用LIMIT,但是可以不使用它吗?

假设我们有列 id和标记。

4 个答案:

答案 0 :(得分:8)

假设标记是唯一的,以下查询会为您提供第二大标记。

SELECT   MAX(marks)
FROM     ATable
WHERE    marks < (SELECT MAX(marks) FROM ATable)

要获取整个记录,您可以将其包装在INNER JOIN

SELECT  t1.*
FROM    ATable t1
        INNER JOIN (
          SELECT   marks = MAX(marks)
          FROM     ATable
          WHERE    marks < (SELECT MAX(marks) FROM ATable)
        ) t2 ON t2. marks = t1.marks

答案 1 :(得分:1)

select max(number), id 
from <tableName>
where number < (select max(number) from <tableName>)

答案 2 :(得分:0)

你可以做一个

SELECT MAX(marks) FROM TABLE 
WHERE marks NOT IN (SELECT MAX(marks) FROM TABLE)

但是LIMIT应该比上面的表现更好,所以问题是为什么你不喜欢它?

答案 3 :(得分:0)

如果你需要整行(所有列),这个就可以了。此外,它总是只返回一行,即使有几行具有相同的第二个最大值。

Select top 1 * 
  From (Select Top 2 * 
          From TABLE 
         Order By marks desc
       ) a
Order By marks asc

如果您只想要一行具有真正的第二个最大值,则应使用:

select Top 1 * 
  from TABLE
 where marks < (select max(marks) from TABLE)
Order by max desc

也可以通过CTE(SQL Server 2005+)来完成:

;With a as 
(
Select Dense_Rank() over (order by marks desc) as nRank,
       *
  From TABLE
)
Select Top 1 * 
  from a
 Where nRank=2

如果要查看具有第二个最大标记的所有行,只需从上一个查询中删除TOP 1即可。