gpt4 book ai didi

MySQL:获取列中第二个数值最大值的最佳方法?无查询限制

转载 作者:行者123 更新时间:2023-11-28 23:28:27 26 4
gpt4 key购买 nike

问题:

给定一个表 people,其中有一列 age(类型:INTEGER),编写一个查询来搜索并返回第二大的年龄。

我的解决方案:

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 的两个查询中的最大值长度分别为 -1n。这个分析正确吗?如果是这样,在我看来我应该选择第二种解决方案。将不胜感激任何想法,谢谢!

最佳答案

我认为limit/offset是最简单的方法:

select age
from people
group by age
order by age desc
limit 1, 1;

但是,您的第一个版本:

SELECT MAX(age)
FROM people
WHERE age <> (SELECT MAX(age) FROM people);

如果您有关于people(age) 的索引,从性能的角度来看可能是最佳的。

等等:我会表达为:

SELECT age
FROM people
WHERE age <> (SELECT MAX(age) FROM people)
ORDER BY age DESC
LIMIT 1;

聚合在 MySQL 中可能相当昂贵。

关于MySQL:获取列中第二个数值最大值的最佳方法?无查询限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com