ホームページ >データベース >mysql チュートリアル >大きなテーブル内の各グループの列の最大値を効率的に見つけるにはどうすればよいですか?

大きなテーブル内の各グループの列の最大値を効率的に見つけるにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-21 08:12:10443ブラウズ

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

大きなテーブルのグループ化された列の最大値を検索します

この例では、非効率的な複数テーブル検索を実行せずに、大きなテーブルの各グループから特定の列の最大値を持つ行を抽出する必要があります。次の形式を考えてみましょう:

<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>

このクエリでは、次の重要な概念が使用されます:

  • PARTITION BY: ID 列ごとに行をグループ化します。
  • MAX(round): 各パーティションの最大ラウンド数を計算します。
  • FIRST_VALUE(score): 最大ラウンド数で各 ID の最初 (最新) スコアを取得します。
  • DISTINCT: 一意の行のみが返されるようにし、重複した結果を排除します。

この最適化されたクエリは、テーブルを複数回スキャンする必要がなく、一意の ID ごとに最新のラウンドとスコアを効率的に返し、大規模なテーブルでも効率的です。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。