ホームページ > データベース > mysql チュートリアル > Oracle SQLを使用してグループ化されたデータ内の各キーの最大VALをフェッチするにはどうすればよいですか?

Oracle SQLを使用してグループ化されたデータ内の各キーの最大VALをフェッチするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-17 19:11:08
オリジナル
308 人が閲覧しました

How to Fetch the Maximal VAL for Each KEY in Grouped Data Using Oracle SQL?

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 を含む行を効果的に選択します (したがって、暗黙的に、各行内の VALNUM の間に一貫した関係があると仮定して、最も高い VAL が選択されます)キー)。

重要な注意事項: このメソッドでは、KEY ごとに 1 行が保証されます。 NUM 内の潜在的な関係を別の方法で処理する必要がある場合 (たとえば、複数の行が最大の KEY を共有する場合に NUM に対して複数の行を返す)、RANK() の代わりに DENSE_RANK() または ROW_NUMBER() を使用することを検討してください。

以上がOracle SQLを使用してグループ化されたデータ内の各キーの最大VALをフェッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート