在 MySQL 中选择前 N 个最大值
在检索具有最高值的前 N 行时确定正确的行为可能具有挑战性,特别是当多行共享相同的最大值。本文解决了是否仅返回前 N 行或包含具有相同值的其他行的问题。
要获取前 N 个不同行,可以使用以下查询:
select * from t order by value desc limit N;
此查询根据值列的降序检索前 N 行。但是,如果多行共享第 N 个最大值,则只会返回前 N 行,不包括任何具有相同值的行。
在需要返回具有相同最大值的所有行的场景中,可以使用以下查询:
select * from t join (select min(value) as cutoff from (select value from t order by value limit N ) tlim ) tlim on t.value >= tlim;
或者,可以使用上述查询的简化版本使用:
select * from t join (select value from t order by value limit N ) tlim on t.value = tlim.value;
这两个查询不仅返回前 N 行,还返回共享相同最大值的任何其他行。
虽然以下查询在概念上实现了所需的结果,由于数据库特定的限制,它可能与 MySQL 不兼容:
select * from t where t.value >= ANY (select value from t order by value limit N)
通过了解可用的不同方法,开发人员可以根据自己的具体要求选择合适的查询在 MySQL 中检索前 N 个最大值时。
以上是在 MySQL 中检索前 N 行时如何处理重复的最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!