【MySQL】グループ化したデータの中から最大値を持つレコードを抽出する

  • 2020年3月27日
  • SQL

ちょっとわかりにくいタイトルですが…今回は MySQL でのデータ取得についてです。
ユーザーIDなどでクループ化したデータの中から、特定のカラムで最大値を持つレコードを取得する方法が分からなかったのでまとめました。
例を挙げると、「3人分の国語・数学・英語のテストデータが格納されたテーブルから、受験者ごとにそれぞれ一番得点が高かったレコードを取得する」方法です。

今回参考にさせていただいた記事はこちらから。

mysqlのGROUP BYでグループ化した中で最新のレコードを取得する – Qiita
https://qiita.com/bitarx/items/87aa7f19c7cb1e34beb6

 

サンプルのデータはこちら。

ID member_id subject score
1 1 Japanese 73
2 1 Math 92
3 1 English 70
4 2 Japanese 93
5 2 Math 52
6 2 English 64
7 3 Japanese 80
8 3 Math 96
9 3 English 54

3人分の 3教科のテストデータが格納されているテーブルがあります。
テーブル名は test_scores としておきます。
このテーブルから、受験者ごとに最も得点が高かったテストのレコードを取得します。

実行する MySQL 文はこちら。

SELECT * FROM test_scores WHERE id IN ( 
  SELECT MAX(score) FROM test_scores GROUP BY member_id
);

SELECT 文の中に SELECT 文が入るサブクエリを使うのが正解だったようです。
サブクエリは、未だに使いこなせていないので、これは分からなかった…。
こうして実際に SELECT 文を見れば、なるほどと思うのですが…まだまだ勉強不足ですね。

 

以上、MySQL でグループ化したデータの中から、指定したカラムで最大値を持つレコードを取得する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG