识别 MySQL 中的前 N 个最大值
在许多场景中,查询特定列中具有最高值的前 N 行至关重要。但是,对于如何处理多行共享相同最大值的情况以及是包含具有相同值的所有行还是仅包含前 N 行,可能会出现混淆。
要解决此问题,您可以使用以下方法:
选项 1:精确前 N
使用 LIMIT 子句,您可以检索精确的前 N 个按值降序排列前 N 行,排除任何具有相同值的行:
SELECT * FROM t ORDER BY value DESC LIMIT N
选项 2:包含前 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.cutoff
或者,您可以使用简化版本:
SELECT * FROM t JOIN ( SELECT value FROM t ORDER BY value LIMIT N ) tlim ON t.value = tlim.value
概念替代(可选)
虽然以下查询从概念上捕获了所需的行为,但它可能不适用于MySQL:
SELECT * FROM t WHERE t.value >= ANY (SELECT value FROM t ORDER BY value LIMIT N)
以上是如何高效识别MySQL中前N个最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!