本教程解決瞭如何檢索具有最高或最小值的記錄的問題每個組內的指定字段,而不依賴排名(@Rank)。雖然這個最初的問題使用 @Rank 作為解決方案,但後續回應展示了使用連接的更有效方法。
要取得每個群組具有最高OrderField 的行,請使用左外部join 和以下查詢:
如果群組內多個記錄具有相同的OrderField並且您需要其中一個,則可以將條件擴展為如下所示:
此精煉查詢確保僅當同一組GroupId 中不存在具有較高OrderField 值或具有較低Id 值的相等OrderField 的其他行t2 時,才回傳t1。因此,它有效地檢索每個組中具有最大 OrderField 的行。
與早期涉及 @Rank 和子查詢的方法相比,使用左外連接方法可以顯著提高查詢效能。左外連接可以利用 (GroupId, OrderField) 上的索引來優化存取。
使用 @Rank 的初始方法可能無法按預期運行,因為在處理第一個表後,@Rank 增量繼續。要將表之間的 @Rank 重設為零,您需要引入額外的派生表,但這可能會導致優化不佳。
以上是如何在不使用排名函數的情況下在 SQL 中高效找到每組的最小值和最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!