ホームページ > データベース > mysql チュートリアル > SQL で関連列の最大値に基づいて値を効率的に取得するにはどうすればよいですか?

SQL で関連列の最大値に基づいて値を効率的に取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-17 19:07:10
オリジナル
230 人が閲覧しました

How Can I Efficiently Retrieve Values Based on the Maximum of a Related Column in SQL?

該当カラムの最大値をもとに効率的にデータを取得します

関連する列の最大値に基づいて特定の列の値を取得し、3 番目の列でグループ化する必要があるシナリオでは、SQL が最適化されたソリューションを提供します。 KEY、NUM、VAL 列のデータが含まれる次のテーブルについて考えてみましょう:

KEY NUM VAL
A 1 AB
B 1 CD
B 2 EF
C 2 GH
C 3 HI
D 1 JK
D 3 LM

目標は、このデータから次の結果を取得することです:

KEY VAL
A AB
B EF
C HI
D LM

質問で提供されたクエリではこの結果が得られますが、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 列に基づいて行を効率的に分割し、各パーティション内で行番号を降順 seqnum に割り当てます。 seqnum が 1 に等しい行を選択すると、目的の結果が得られ、目的のグループ化が保持されます。

このメソッドは、キーごとに常に 1 行を返すのに対し、元のクエリは複数の行を返す可能性があるという点で、元のクエリとは少し異なることに注意してください。この動作が必要な場合は、rank() の代わりに dense_rank() または row_number() を使用できます。

以上がSQL で関連列の最大値に基づいて値を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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