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