MySQL:选择前 N 个最大值
尝试检索特定值中具有最高值的前 N 行时,经常会出现混乱柱子。问题是是否只返回前 N 行,或者如果它们共享相同的最大值,则包含其他行。
要实现前者,以下查询就足够了:
SELECT * FROM t ORDER BY value DESC LIMIT 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.cutoff;
或者,可以简化查询:
SELECT * FROM t JOIN ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ON t.value = tlim.value;
最后,另一种方法涉及使用 ANY 函数,但它与 MySQL 的兼容性可能有所不同:
SELECT * FROM t WHERE t.value >= ANY ( SELECT value FROM t ORDER BY value LIMIT N )
这种方法还包括具有相同最大值的行,为该问题提供了概念上清晰的解决方案。
以上是如何在 MySQL 中选择前 N 个最大值:仅返回 N 行或包含并列?的详细内容。更多信息请关注PHP中文网其他相关文章!