首頁 > 資料庫 > mysql教程 > 如何有效率地檢索資料庫中每組的最高或最低記錄?

如何有效率地檢索資料庫中每組的最高或最低記錄?

Barbara Streisand
發布: 2024-12-24 22:08:11
原創
583 人瀏覽過

How Can I Efficiently Retrieve the Highest or Lowest Record per Group in a Database?

檢索每組最高/最低的記錄

問題陳述

如何有效地擷取最高/最低的記錄或由另一個群組定義的每個群組中特定欄位的最低值欄位?

使用左外連接的解決方案

要檢索每個 GroupId 中 OrderField 欄位具有最高值的記錄,請使用以下查詢:

SELECT t1.*
FROM `Table` AS t1
LEFT OUTER JOIN `Table` AS t2
  ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField
WHERE t2.GroupId IS NULL
ORDER BY t1.OrderField;
登入後複製

加入的好處方法

  • 對於大型資料集有效
  • 如果可用的話,在(GroupId,OrderField)上使用索引🎜>如果可用的話,在(GroupId,OrderField)上使用索引🎜 >
  • 不需要子查詢或排序查詢

替代方案

如果資料很小或您正在使用的資料庫引擎的特定實作對於連線最佳化不佳,您可以考慮諸如as:

  • 使用子查詢:這涉及使用子查詢計算每個群組的最大值,然後將此子查詢連接到主表以檢索相應的記錄。
  • 使用排名函數:這涉及到使用視窗函數來計算每組中每筆記錄的排名,然後根據排名進行過濾。

使用@Rank的方法效率低下變數

您使用@Rank 變數所描述的方法(如最初編寫的)將無法正常運作,因為@Rank 變數在處理第一個表格後不會重設為零。要解決此問題,您需要新增另一個衍生表,以在處理第二個表之前將 @Rank 重設為零。然而,與 join 方法相比,這種方法仍然效率低。

以上是如何有效率地檢索資料庫中每組的最高或最低記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板