ホームページ >データベース >mysql チュートリアル >MySQL の各グループから最大値を持つ行を選択するにはどうすればよいですか?

MySQL の各グループから最大値を持つ行を選択するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 01:44:08848ブラウズ

How to Select the Row with the Maximum Value from Each Group in MySQL?

MySQL での最大値に基づいた行のグループ化と取得

データベース管理では、グループから特定の行を取得することがデータ分析にとって重要な場合がありますそして報告すること。 MySQL では、グループ化と順序付けの操作がこの点で重要な役割を果たします。ただし、グループ化操作を適用した後、グループから最も高い値を持つ行を選択しようとすると、共通の課題が発生します。

複数のバージョンのデータを表す行が含まれるテーブルがあるシナリオを考えてみましょう。 id 列と version_id 列によって決まります。目標は、一意の ID ごとに最も高い version_id を持つ行を取得することです。

order by 句で group by を使用する直感的なアプローチでは望ましい結果が得られませんが、MySQL はこのクエリに対していくつかの効率的なソリューションを提供します。 :

最大ベースのグループ化:

SELECT *
FROM (SELECT id, MAX(version_id) AS max_version_id FROM table GROUP BY id) AS subquery
JOIN table ON subquery.id = table.id AND subquery.max_version_id = table.version_id;

このクエリはサブクエリを使用して、各 ID グループの最大 version_id を計算します。次に、メイン クエリは内部結合を実行して、元のテーブルから対応する行を取得します。

相関サブクエリ:

SELECT t1.*
FROM table AS t1
WHERE t1.version_id = (SELECT MAX(version_id) FROM table WHERE id = t1.id);

このアプローチでは、相関サブクエリを使用して比較します。各行の version_id とその ID グループ内の最大値。メイン クエリは、条件を満たす行のみを選択します。

ウィンドウ関数:

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

ウィンドウ関数は、各 ID 内の最大 version_id を計算することで代替アプローチを提供します。パーティション。 OVER 句はパーティション化基準を指定し、ORDER BY 句は各パーティション内で行が確実に順序付けされるようにします。

これらのソリューションは、個別の ID ごとに最も高い version_id を持つ行を効率的に取得する方法を提供します。グループ化と順序付けの操作のニュアンスを理解することで、データベース ユーザーはクエリを調整して、複雑なデータ構造から意味のあるデータを抽出できます。

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

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