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