MySQL の集計関数 - COUNT()・SUM()
ここでは MySQL のよく使う集計関数の COUNT() と SUM() についてご説明します。
サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。
MySQL の 集計関数 COUNT() の使い方
MySQL の COUNT() は、SELECT 文 で使い、レコードの数を BIGINT 型で返す集計関数です。
SELECT COUNT(カラム名)
FROM テーブル名
WHERE ...
上のように COUNT(カラム名) のようにカラム名を指定した時は、そのカラムの NULL 以外のレコード数を返します。
COUNT(DISTINCT カラム名) と指定すると、そのカラムに保存されている NULL 以外のユニークな値のレコード数が取得できます。
COUNT(*) のように指定することもでき、この場合はカラムにかかわらず、NULL も含んだレコード数が取得できます。
それでは、COUNT() を使ってデータを取得してみましょう。
次のような exam_results テーブルがあります。
例えば、この exam_results テーブルの exam_id が 2 のレコードの数を取得したい時は、COUNT(*) を使って次のように書きます。
SELECT COUNT(*),
COUNT(student_id)
FROM exam_results
WHERE exam_id = 2;
[実行結果]
exam_id = 2 のレコードが 4 行あるので、COUNT(*) は 4 を返しています。
COUNT(student_id) も取得していますが、exam_result_id = 6 のレコードの student_id が NULL なので 3 を返しています。
exam_id ごとの student_id の数を取得したい時は GROUP BY と COUNT(student_id) を使って、次のように取得できます。
SELECT exam_id,
COUNT(student_id)
FROM exam_results
GROUP BY exam_id;
[実行結果]
テストにかかわらず、exam_results テーブルにレコードがある student_id の数を知りたい時には、COUNT と DISTINCT を使って次のように取得できます。
SELECT COUNT(DISTINCT student_id)
FROM exam_results;
[実行結果]
5 人の学生のデータが exam_results テーブルにあることがわかります。
MySQL の 集計関数 SUM() の使い方
MySQL の SUM() は結果セットのなかで、指定したカラムの合計値を返してくれる集計関数です。
SELECT SUM(カラム名)
FROM テーブル名
WHERE ...
例えば、以下の exam_results テーブルから、exam_id が 1 の score の合計値は次のように取得できます。
SELECT SUM(score)
FROM exam_results
WHERE exam_id = 1;
[実行結果]
また、COUNT() の時と同様に、GROUP BY と一緒に使って、exam_id ごとの score の合計値も取得できます。
SELECT exam_id,
SUM(score)
FROM exam_results
GROUP BY exam_id;
[実行結果]
最後に、結果セットにレコードがなかった時、COUNT() は 0 を返しますが、SUM() は NULL を返しますのでご注意ください。
SELECT COUNT(student_id),
SUM(score)
FROM exam_results
WHERE exam_id = 0;
[実行結果]
以上、MySQL のよく使う集計関数の COUNT() と SUM() についてご説明しました。