浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

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

ちょっとわかりにくいタイトルですが…今回は 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 でグループ化したデータの中から、指定したカラムで最大値を持つレコードを取得する方法でした。
ご参考になれば幸いです。

  • この記事いいね! (0)