ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。