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