[MySQL] AVGを使ってグループごとの平均値を求める方法

MySQLで平均値を求めるにはAVGを使います。基本的な構文である 「SELECT カラム名 FROM テーブル名」 のカラム名をAVG(カラム名)に変更するだけで、指定したカラムの平均値が算出されます。
今回は全体の平均を算出した後で、グループごとの平均値を算出していきます。
テーブルとデータの準備
「test」テーブルを作成します。カラムは「subject」「score」の2つ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CREATE TABLE `test` ( `subject` varchar(20) NOT NULL, `score` int(3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; データをINSERTします。科目名と点数です。 INSERT INTO `test` (`subject`, `score`) VALUES ('国語', 100), ('数学', 78), ('英語', 65), ('国語', 90), ('数学', 95), ('英語', 88), ('国語', 39), ('数学', 59), ('英語', 77); |
全データの表示
INSERTしたデータを表示してみます。
1 |
SELECT * FROM test |
全平均値の取得
今回は「score」カラムの合計値を出したいので、scoreをAVG()で囲みます。
1 |
SELECT AVG(score) FROM test |
教科別の平均値の取得
GROUP BYに「subject」を指定し、科目別の平均値を取得してみます。
1 |
SELECT subject,AVG(score) FROM test GROUP BY subject |
「国語」「数学」「英語」の3科目の平均値がそれぞれ算出されました。
関連記事
- [MySQL]1カラムに登録されたカンマ区切りデータを検索・抽出する方法(FIND_IN_SET)
- [CakePHP] 独自SQLのAS句で新しいフィールドを作りCakePHPの形式でデータを出力する方法
- [MySQL] 当日と前日の売上データの差を求める方法(自己結合)
- [CakePHP] Formでテーブル形式のデータを一括保存する方法
- [MySQL] Incorrect datetime value: ‘0000-00-00 00:00:00’ for column エラー対処方法