1
问题:MySQL:获得列中第二大数值最大值的最佳方法?没有查询限制
给定一个表people
与列age
(类型:整数),编写一个查询来搜索和返回的第二大时代。
我的解决办法:
SELECT MAX(age) FROM people
WHERE age <> (SELECT MAX(age) FROM people);
和
SELECT age FROM people
ORDER BY age DESC LIMIT 1,1;
非常简单的问题,但我不知道哪一个是更理想的,即,最大限度地减少SQL负载查询。我不熟悉SQL设置中的算法复杂性,但我的猜测是第一个查询在O(n^2)
中运行,因为MySQL需要分别查找长度分别为n-1
和n
的两个查询的最大值。这个分析是否正确?如果是这样,我认为我应该去找我的第二个解决方案。将不胜感激任何想法,谢谢!
在第一个查询中不需要GROUP BY(如所写)。 –
如果你有'INDEX(age)',第一个查询是非常优化的;从性能的角度来看,第二个是糟糕的;第三个是马马虎虎。 –
@RickJames。 。 。在第一个查询中需要“GROUP BY”。 OP似乎想要第二个不同的值,而不是第二行中的值(可能与最大值相同)。 –