ホームページ >データベース >mysql チュートリアル >MySQL の MAX() と GROUP BY を使用して非集計列を正しく取得するにはどうすればよいですか?

MySQL の MAX() と GROUP BY を使用して非集計列を正しく取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-30 21:27:09903ブラウズ

How Can I Correctly Retrieve Non-Aggregated Columns with MySQL's MAX() and GROUP BY?

MySQL の MAX() によるグループ化と集計

MySQL では、MAX() 関数を GROUP BY と組み合わせて使用​​できます。句を使用してデータを集計し、各グループ内の指定された列の最大値を選択します。ただし、ターゲット列がグループ内で一意でない場合、対応する非集計列を選択すると予期しない結果が生じる可能性があります。

この問題を説明するために、次の SQL クエリを調べてみましょう:

SELECT MAX(timestamp), rid, pid
FROM theTable
GROUP BY rid;

選択された pid 列が最大値のタイムスタンプと一致しない可能性があるため、このクエリの結果は望ましい結果と一致しない可能性があります。

To正しい結果を得るには、クエリを変更して各グループ内の最大のタイムスタンプを持つ行を特定し、これらの行を元のテーブルと結合して対応する PID を取得する必要があります。

次の変更された SQL クエリはこれを実現します。 :

SELECT test.pid, test.cost, test.timestamp, test.rid
FROM theTable AS test
INNER JOIN
    (SELECT rid, MAX(timestamp) AS ts
    FROM theTable
    GROUP BY rid) AS maxt
ON (test.rid = maxt.rid AND test.timestamp = maxt.ts);

このクエリは、まずサブクエリを使用して各 Rid の最大タイムスタンプを特定し、それを元のテーブルと結合します。結合条件により、選択された行が各 Rid グループ内で最大のタイムスタンプを持つ行であることが保証されます。

その結果、目的の出力が取得されます。

pid cost timestamp rid
5 345 2011-04-14 01:06:06 1
3 4455 2011-04-14 01:05:41 2
7 5435 2011-04-14 01:14:14 3

以上がMySQL の MAX() と GROUP BY を使用して非集計列を正しく取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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