最佳化 SQL 查詢:擷取最大值與相關資料
從其他欄位中有效提取最大值以及關聯資料是一項常見的 SQL 任務。 對於大型資料集,巢狀選擇或簡單 GROUP BY
查詢等標準方法可能效率低。
考慮一個包含 ID
、tag
和 version
欄位的表。 目標是找到每個唯一 version
的最大值 ID
並檢索對應的 tag
。
高效率的解決方案利用ROW_NUMBER()
視窗函數:
對行進行排名: 子查詢根據 version
列(降序)為每行分配排名,並按 ID
列分區:
<code class="language-sql">SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t</code>
篩選最大版本: 外部查詢只選擇排名 (rnk
) 為 1 的行。這會隔離每個 version
具有最高 ID
的行:
<code class="language-sql">SELECT s.id, s.tag, s.version FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t ) s WHERE s.rnk = 1</code>
此方法避免了巢狀選擇和昂貴的 GROUP BY
操作,使其在處理大型資料集時速度顯著加快,同時保持準確性。 這是在這種情況下獲得最佳性能的首選方法。
以上是如何在 SQL 中高效檢索最大值及其關聯資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!