ホームページ  >  記事  >  データベース  >  MySQL でグループごとの最大値を選択するには?

MySQL でグループごとの最大値を選択するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-22 09:56:11947ブラウズ

How to Select the Group-Wise Maximum in MySQL?

MySQL でのグループごとの最大値の選択

リレーショナル データベースでは、グループごとに特定の列の最大値を持つ行を取得する必要がある場合があります。これは、グループごとの最大値の選択として知られています。 MySQL では、これを実現するためのアプローチがいくつかあります。

サブクエリ メソッド

効率的な方法の 1 つは、サブクエリを使用することです。

SELECT *
FROM (
  SELECT id, MAX(version_id) AS version_id
  FROM table
  GROUP BY id
) AS t1
INNER JOIN table AS t2
  ON t2.id = t1.id AND t1.version_id = t2.version_id;

このサブクエリは、各 ID の最大バージョン ID を取得し、それを元のテーブルと結合して、対応する行を取得します。これは比較的効率的であり、(id, version_id) 列にインデックスが存在することを前提としています。

集計およびランキングのメソッド

代わりに、集計およびランキング関数を使用することもできます。

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          RANK() OVER (PARTITION BY id ORDER BY version_id DESC) AS ranking
  FROM table
) AS ranked_table
WHERE ranking = 1;

このクエリは、version_id の降順で各 ID の行をランク付けし、次のランクのものを選択します。 1、最大バージョンを効果的にフィルタリングします。

ウィンドウ関数

ウィンドウ関数もこの目的に使用できます。

SELECT id,
       version_id,
       field1,
       field2
FROM (
  SELECT id,
          version_id,
          field1,
          field2,
          MAX(version_id) OVER (PARTITION BY id) AS max_version_id
  FROM table
) AS windowed_table
WHERE version_id = max_version_id;

このクエリは、最大バージョン ID を計算します。 MAX() over() ウィンドウ関数を使用して各 ID を取得し、一致するバージョン ID を持つ行を選択します。

以上がMySQL でグループごとの最大値を選択するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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