Oracle SQL:擷取前 5 個最高值
許多資料庫任務需要根據列的最高或最低值檢索特定數量的行。 這對於識別表現最佳者或建立報告特別有幫助。本文示範了幾種從列中檢索前 5 個值的 Oracle SQL 方法。
使用分析函數:RANK()
和 DENSE_RANK()
分析函數提供高效率的行排名。 RANK()
根據指定的標準分配唯一的排名,而 DENSE_RANK()
提供類似的功能,但消除了排名中的差距。
要使用 RANK()
從「emp」表的「sal」欄位擷取前 5 個薪資:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
利用ROW_NUMBER()
ROW_NUMBER()
函數為每一行分配一個序號,無論順序為何。 這可以將結果限制為特定的行數。
以下是如何使用 ROW_NUMBER()
取得前 5 名薪資:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
替代方法:ROWNUM
偽列
ROWNUM
偽列提供查詢結果中的實體行號。 然而,由於潛在的不一致,通常不鼓勵使用它來限制結果。
使用 ROWNUM
的範例:
<code class="language-sql">SELECT * FROM ( SELECT empno, sal FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
選出正確的方法
最佳方法取決於具體需求和資料特徵。
RANK()
和 DENSE_RANK()
保持排名順序,即使有平局。 ROW_NUMBER()
保證特定的行數,但可能會任意截斷綁定結果。 ROWNUM
可靠性較低,應謹慎使用。 仔細考慮這些方法對於 Oracle SQL 中準確且一致的資料檢索至關重要。
以上是如何檢索 Oracle SQL 中前 5 個列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!