在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中文網其他相關文章!