ホームページ >データベース >mysql チュートリアル >大きなテーブル内の各グループの列の最大値を効率的に見つけるにはどうすればよいですか?
大きなテーブルのグループ化された列の最大値を検索します
この例では、非効率的な複数テーブル検索を実行せずに、大きなテーブルの各グループから特定の列の最大値を持つ行を抽出する必要があります。次の形式を考えてみましょう:
<code>SCORES ID ROUND SCORE 1 1 3 1 2 6 1 3 2 2 1 10 2 2 12 3 1 6</code>
あなたの目標は、一意の ID ごとに最新のラウンドと対応するスコアを取得することです。目的の出力は次のとおりです:
<code>ID ROUND SCORE 1 2 6 2 2 12 3 1 6</code>
ウィンドウ関数を使用した効率的な解決策
効率的な方法は、DISTINCT キーワードと組み合わせてウィンドウ関数を使用することです。
<code class="language-sql">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;</code>
このクエリでは、次の重要な概念が使用されます:
この最適化されたクエリは、テーブルを複数回スキャンする必要がなく、一意の ID ごとに最新のラウンドとスコアを効率的に返し、大規模なテーブルでも効率的です。
以上が大きなテーブル内の各グループの列の最大値を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。