ホームページ >データベース >mysql チュートリアル >Oracle SQLのグループ内の最大列値に関連付けられた値を効率的に取得する方法

Oracle SQLのグループ内の最大列値に関連付けられた値を効率的に取得する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-17 19:21:37616ブラウズ

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

1 つのメソッドはサブクエリを使用します。

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。