如何在不使用LIMIT 的情况下从表中选择第二大标记或其他内容? 我知道有可能使用LIMIT,但是可以不使用它吗?
假设我们有列 id和标记。
答案 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即可。