ホームページ > データベース > mysql チュートリアル > SQL で ID でグループ化された列の最大値を効率的に取得するにはどうすればよいですか?

SQL で ID でグループ化された列の最大値を効率的に取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-21 08:09:39
オリジナル
1012 人が閲覧しました

How to Efficiently Retrieve the Highest Value of a Column Grouped by ID in SQL?

ID ごとにグループ化された最大列値を検索する SQL クエリ

この記事では、データベース テーブル内で一意の ID によってグループ化された列から最大値を効率的に取得するという問題に取り組みます。 「スコア」テーブルで説明してみましょう:

<code>ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>
ログイン後にコピー

私たちの目標は、各「ID」の最大の「ROUND」値とそれに対応する「SCORE」を含む行を取得することです。望ましい出力は次のとおりです:

<code>ID   ROUND   SCORE
1    3       2
2    2       12
3    1       6</code>
ログイン後にコピー

サブクエリのアプローチは可能ですが、大規模なデータセットの場合は非効率となる可能性があります。 優れた方法はウィンドウ関数を利用します:

SELECT DISTINCT
       id
      ,max(round) OVER (PARTITION BY id) AS round
      ,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;
ログイン後にコピー

このクエリは max(round) OVER (PARTITION BY id) を利用して、各 "ID" の最大 "ROUND" を決定します。 first_value(score) OVER (PARTITION BY id ORDER BY round DESC) は、その最大の「ROUND」に関連付けられた「SCORE」を取得します。 DISTINCT は、「ID」ごとに 1 行のみが返されることを保証します。

このウィンドウ関数のアプローチにより、複数のテーブル スキャンが回避され、大規模なデータベースに対して大幅に効率的なソリューションが提供されます。

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

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