Oracle SQL: 列内の上位 5 つの最大値を取得する方法
データベース クエリでは、特定の列の最高値または最低値など、特定の特性を持つ行に結果を制限することが必要になることがよくあります。 Oracle SQLでは、この目的のために、RANK()、DENSE_RANK()、ROW_NUMBER()などの分析関数を使用できます。
最高値の場合は RANK() と DENSE_RANK()
RANK() や DENSE_RANK() などの分析関数は、指定されたランキングに基づいて各行にランクを割り当てます。列内の上位 5 つの最大値を取得するには、次のクエリ形式を使用できます:
<code class="language-sql">SELECT * FROM ( SELECT <column_name>, RANK() OVER (ORDER BY <column_name> DESC) AS rnk FROM <table_name> ) WHERE rnk <= 5;</code>
RANK() は、最高値 1 から始まる数値ランクを各行に割り当てます。 DENSE_RANK() はランクを割り当てながら、同一の値が存在する場合にギャップを圧縮します。
特定の行数の ROW_NUMBER()
ROW_NUMBER() 分析関数は、各行にシリアル番号を割り当てます。これを使用すると、値に関係なく特定の数の行を取得できます。例:
<code class="language-sql">SELECT * FROM ( SELECT <column_name>, ROW_NUMBER() OVER (ORDER BY <column_name> DESC) AS rnk FROM <table_name> ) WHERE rnk <= 5;</code>
非分析ソリューション: ROWNUM を使用します
それほど一般的ではありませんが、ROWNUM 疑似列を使用して結果を特定の行数に制限することもできます。ただし、ROWNUM は ORDER BY 句の前に評価されるため、予期しない結果が生じる可能性があるため、使用には注意が必要です。
例: 最も給与の高い従業員を取得します
給与の最も高い従業員 5 人を取得するときの RANK() と DENSE_RANK() の使用例を示します。
<code class="language-sql">SELECT * FROM ( SELECT empno, sal, RANK() OVER (ORDER BY sal DESC) AS rnk FROM emp ) WHERE rnk <= 5;</code>
このクエリは、各従業員に給与に基づいて数値ランクを割り当てます。1 は最も給与の高い従業員を表します。次に、給与の降順で上位 5 人の従業員が表示されます。
以上がOracle SQL列から上位5つの最大値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。