首頁 > 資料庫 > mysql教程 > 如何在不使用排名函數的情況下在 SQL 中高效找到每組的最小值和最大值?

如何在不使用排名函數的情況下在 SQL 中高效找到每組的最小值和最大值?

Linda Hamilton
發布: 2024-12-23 22:32:17
原創
754 人瀏覽過

How to Efficiently Find Minimum and Maximum Values per Group in SQL Without Using Ranking Functions?

獲取每組的最高和最小值

概述

本教程解決瞭如何檢索具有最高或最小值的記錄的問題每個組內的指定字段,而不依賴排名(@Rank)。雖然這個最初的問題使用 @Rank 作為解決方案,但後續回應展示了使用連接的更有效方法。

解決方案

要取得每個群組具有最高OrderField 的行,請使用左外部join 和以下查詢:

如果群組內多個記錄具有相同的OrderField並且您需要其中一個,則可以將條件擴展為如下所示:

此精煉查詢確保僅當同一組GroupId 中不存在具有較高OrderField 值或具有較低Id 值的相等OrderField 的其他行t2 時,才回傳t1。因此,它有效地檢索每個組中具有最大 OrderField 的行。

最佳化

與早期涉及 @Rank 和子查詢的方法相比,使用左外連接方法可以顯著提高查詢效能。左外連接可以利用 (GroupId, OrderField) 上的索引來優化存取。

關於 @Rank 的警告

使用 @Rank 的初始方法可能無法按預期運行,因為在處理第一個表後,@Rank 增量繼續。要將表之間的 @Rank 重設為零,您需要引入額外的派生表,但這可能會導致優化不佳。

以上是如何在不使用排名函數的情況下在 SQL 中高效找到每組的最小值和最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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