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

如何在SQL中有效率地檢索每組最高或最低值的記錄?

Patricia Arquette
Patricia Arquette原創
2024-12-11 17:57:16827瀏覽

How to Efficiently Retrieve Records with the Highest or Lowest Values per Group in SQL?

取得每組最高/最小值的記錄

問題:

問題:

檢索記錄每個字段中給定欄位的最高或最小值

先前提出的解決方案:

在帶有子查詢的複雜查詢中使用排名(@rank := @rank 1)。

替代解決方案:
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) 上的索引策略來優化對t2 的訪問,從而達到預期結果。

  • 最佳化注意事項:
  • 索引:至關重要在(GroupId, OrderField) 上有一個複合索引以獲得最佳性能。
AND (t1.OrderField < t2.OrderField 
     OR (t1.OrderField = t2.OrderField AND t1.Id < t2.Id))
多個最高/最小值:

要處理組內多個記錄具有相同最高/最小值的情況,請擴展條件如下:

  • 左外連接的優點做法:
  • 不使用排序或子查詢,消除潛在的效能問題。
更好的最佳化,允許查詢最佳化器有效地使用索引。 與基於排名的方法相比,執行速度更快。

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

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