提取 Oracle SQL 中每個 KEY 的最高 VAL
本指南示範如何使用 Oracle SQL 高效檢索分組資料中每個 VAL
的最大 KEY
。 讓我們來看一個常見的場景:
名為TABLE_NAME
的表格包含以下資料:
KEY | NUM | VAL |
---|---|---|
A | 1 | AB |
B | 1 | CD |
B | 2 | EF |
C | 2 | GH |
C | 3 | HI |
D | 1 | JK |
D | 3 | LM |
目標是產生一個結果集,只顯示每個唯一 VAL
的最大 KEY
:
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
高效率的 Oracle SQL 解決方案(10g 及更高版本):
雖然子查詢可以實現這一點,但更優雅且通常更快的解決方案使用 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>
此查詢首先為每個 seqnum
分區中的每一行分配一個排名 (KEY
),按 NUM
按降序排列。 然後,它過濾結果以僅包含具有seqnum = 1
的行,從而有效地選擇具有最高NUM
的行(因此,隱式地,假設每個內VAL
和NUM
之間存在一致的關係,則最高的VAL
鍵)。
重要提示: 此方法保證每個 KEY
一行。 如果您需要以不同方式處理NUM
中的潛在關係(例如,如果多行共享最大值KEY
,則傳回NUM
的多行),請考慮使用RANK()
或DENSE_RANK()
而不是ROW_NUMBER()
。
以上是如何使用 Oracle SQL 取得分組資料中每個 KEY 的最大 VAL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!