首頁 > 資料庫 > mysql教程 > 如何在 Oracle SQL 中高效檢索與群組內最大列值相關的值?

如何在 Oracle SQL 中高效檢索與群組內最大列值相關的值?

Linda Hamilton
發布: 2025-01-17 19:21:37
原創
616 人瀏覽過

How to Efficiently Retrieve Values Associated with Maximum Column Values Within Groups in Oracle SQL?

Oracle SQL:擷取與群組內最大列值連結的值

常見的資料庫任務涉及選擇與列的最大值關聯的值,尤其是在處理分組資料時。 讓我們考慮一個包含 KEYNUMVAL 欄位的表格:

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

目標是找到每個NUM及其對應的KEY的最大值VAL。所需的輸出:

KEY VAL
A AB
B EF
C HI
D LM

一種方法使用子查詢:

<code class="language-sql">select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    );</code>
登入後複製

然而,一種更有效率、更易讀的方法是使用 ROW_NUMBER() 函數:

<code class="language-sql">select key, val
from (select t.*, row_number() over (partition by key order by num desc) as seqnum
      from table_name t
     ) t
where seqnum = 1;</code>
登入後複製

這會根據降序 KEY 值在每個 NUM 組內分配排名。 然後,WHERE 子句篩選最高排名 (seqnum = 1),產生所需的結果:

KEY VAL
A AB
B EF
C HI
D LM

雖然兩種方法達到相同的結果,但 ROW_NUMBER() 方法通常提供更好的效能和清晰度,特別是對於較大的資料集。 最佳選擇取決於特定的需求和偏好,但是 ROW_NUMBER() 為這個常見的 SQL 問題提供了強大且優雅的解決方案。

以上是如何在 Oracle SQL 中高效檢索與群組內最大列值相關的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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