MySQLで集計結果(COUNT)の平均(AVG)を取る場合はサブクエリを使う


以下のようなプレゼント応募情報を管理するテーブルがあった場合に、全ユーザの平均応募数を取得するには

CREATE TABLE `present` (
`present_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`present_id`)
);

一度、user_idごとの応募総数を集計し(サブクエリ)、その結果を用いて平均を出す必要があります。
SQLはこんな感じです。

select avg(a.num) from (select count(present_id) as num from present group by user_id) as a;
  • 参考URL

http://rfs.jp/sb/sql/s03/select_sql.html