GROUP BY
【環境】
MySQL:5.5.27, 5.5.38
MySQL:5.5.27, 5.5.38
MySQL:13.2.9 SELECT 構文
書式
- SELECT * FROM table_name GROUP BY (カラム名)
複数設定
- SELECT * FROM table_name GROUP BY (カラム名1), (カラム名2), ...
こうすることで、まず (カラム名1) でグループ化され
その後 (カラム名1) の中で (カラム名2) でグループ化され・・・
ということになる。
挙動
グループ化されたカラム以外の値はどうなるのか。
id | amount |
---|---|
101 | 1 |
101 | 2 |
101 | 3 |
- SELECT * FROM table_name GROUP BY id
id:101, amount:1 となる。
つまり、先頭行 の値を取ってくる。
最大値、最小値
但し、ちゃんと指定すれば、期待する値を取ることもできる。
- SELECT id, MAX( amount ) FROM table_name GROUP BY id
id:101, amount:3 となる。
最小値は MIN( amount )
その他の指定
MySQL:12.19.1 GROUP BY (集約) 関数
最大値、最小値の他には、下記の指定ができる。
合計:SUM( amount ):6
平均:AVG( amount ):2
レコード数:COUNT( amount ):3
併用も可能
- SELECT id, MAX( amount ), MIN( amount ) FROM table_name GROUP BY id
それ以外
私の場合は、当該グループの最初と最後のデータが欲しかったので
最初はノーマルに取得。
最後はサブクエリでテーブルを逆順にソートして取得。
ORDER BY との併用
ORDER BY と併用する場合、グループ化された後にソートされる。
つまり! 無意味 。