GROUP BY

Posted by muchag | MySQL | 2015-04-05 (日) 9:32:20

レコードのグループ化

【環境】
MySQL:5.5.27, 5.5.38

MySQL:13.2.9 SELECT 構文

書式
  1. SELECT * FROM table_name GROUP BY (カラム名)
複数設定
  1. SELECT * FROM table_name GROUP BY (カラム名1), (カラム名2), ...

こうすることで、まず (カラム名1) でグループ化され
その後 (カラム名1) の中で (カラム名2) でグループ化され・・・
ということになる。

挙動

グループ化されたカラム以外の値はどうなるのか。

id amount
101 1
101 2
101 3
  1. SELECT * FROM table_name GROUP BY id

id:101, amount:1 となる。

つまり、先頭行 の値を取ってくる。

最大値、最小値

但し、ちゃんと指定すれば、期待する値を取ることもできる。

  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

併用も可能
  1. SELECT id, MAX( amount ), MIN( amount ) FROM table_name GROUP BY id
それ以外

私の場合は、当該グループの最初と最後のデータが欲しかったので
最初はノーマルに取得。
最後はサブクエリでテーブルを逆順にソートして取得。

ORDER BY との併用

ORDER BY と併用する場合、グループ化された後にソートされる。
つまり! 無意味

あかつきのお宿:MySQLでGROUP BYとORDER BYを同時に使用する場合に気をつけたいこと

MySQL | 2015-04-05 (日) 9:32:20 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment