首頁  >  文章  >  資料庫  >  在 MySQL 中檢索前 N 行時如何處理重複的最大值?

在 MySQL 中檢索前 N 行時如何處理重複的最大值?

Linda Hamilton
Linda Hamilton原創
2024-11-10 20:25:03826瀏覽

How to Handle Duplicate Maximum Values When Retrieving Top N Rows in MySQL?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn