SQL 查詢尋找按 ID 分組的最大列值
本文解決了從列中高效檢索最高值的問題,該列按資料庫表中的唯一 ID 進行分組。 我們用「SCORES」表來說明:
<code>ID ROUND SCORE 1 1 3 1 2 6 1 3 2 2 1 10 2 2 12 3 1 6</code>
我們的目標是取得包含每個「ID」的最大「ROUND」值的行及其對應的「SCORE」。所需的輸出為:
<code>ID ROUND SCORE 1 3 2 2 2 12 3 1 6</code>
雖然子查詢方法是可能的,但對於大型資料集來說它可能效率低下。 更好的方法是利用視窗函數:
<code class="language-sql">SELECT DISTINCT id ,max(round) OVER (PARTITION BY id) AS round ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score FROM SCORES WHERE id IN (1,2,3) ORDER BY id;</code>
此查詢利用 max(round) OVER (PARTITION BY id)
來決定每個「ID」的最大「ROUND」。 first_value(score) OVER (PARTITION BY id ORDER BY round DESC)
然後擷取與最大「ROUND」相關的「SCORE」。 DISTINCT
確保每個「ID」僅傳回一行。
這種視窗函數方法避免了多次表掃描,為大型資料庫提供了顯著更有效的解決方案。
以上是如何在SQL中有效率地檢索按ID分組的列的最大值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!