MySQL の集計関数 - MIN()・MAX()・AVG()

ここでは MySQL のよく使う集計関数の MIN()、MAX()、AVG() についてご説明します。

サンプルデータベースのテーブルを使いますので、実際にスクリプトを実行してみたい方は、こちら のスクリプトを実行して school_db データベースを作成しておいてください。

MySQL の 集計関数 MIN() と MAX() の使い方

MySQL の MIN() は、SELECT 文 で使い、結果セットの中で指定したカラムの最小値を返す集計関数です。

MAX() も、同様に SELECT 文 で使い、結果セットの中で指定したカラムの最大値を返す集計関数です。

SELECT 	MIN(カラム名),
		MAX(カラム名)
FROM 	テーブル名
WHERE 	...

それでは、MIN() と MAX() を使ってデータを取得してみましょう。

次のような exam_results テーブルがあります。

MySQL の集計関数 - MIN()・MAX()・AVG() 1


例えば、この exam_results テーブルの exam_id が 2 の score の最低点と最高点を取得したい時は次のように取得できます。

SELECT 	MIN(score),
		MAX(score) 
FROM 	exam_results
WHERE 	exam_id = 2;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 2

exam_id = 2 の score の最低点 77 と最高点 91 が取得できていますね。


exam_id ごとの score の最低点と最高点を取得したい時は GROUP BY と MIN(score)、MAX(score) を使って、次のように取得できます。

SELECT 	exam_id,
		MIN(score),
		MAX(score) 
FROM 	exam_results
GROUP BY exam_id;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 3


MySQL の 集計関数 AVG() の使い方

MySQL の AVG() は結果セットのなかで、指定したカラムの平均値を返してくれる集計関数です。

SELECT 	AVG(カラム名)
FROM 	テーブル名
WHERE 	...

例えば、以下の exam_results テーブルから、exam_id が 1 の score の平均値は次のように取得できます。

MySQL の集計関数 - COUNT()・SUM() 1


SELECT 	AVG(score)
FROM 	exam_results
WHERE 	exam_id = 1;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 4

(85 + 60 + 98 + 73) / 4 = 79 なので、正しく取得できていますね。


少し気をつけなければいけないのは、値に NULL が入っているときの動きです。

exam_id が 2 のレコードは 4 つありますが、その中のひとつのレコードの score が NULL になっています。

その状態で AVG(score) を取得すると、値は 4 で割られるのではなく、 3 で割られ、(77 + 92 + 81) / 3 の計算結果 の 83.3333 が返ってきます。

SELECT 	AVG(score)
FROM 	exam_results
WHERE 	exam_id = 2;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 5


もし NULL を 0 点として平均値をとりたい場合は、COALESCE() 関数などで NULL を 0 に変換して AVG() を使うと (77 + 0 + 92 + 81) / 4 の値が取得できます。

SELECT 	AVG(COALESCE(score, 0))
FROM 	exam_results
WHERE 	exam_id = 2;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 6


また、MIN・MAX の時と同様に、GROUP BY と AVG() を一緒に使って、exam_id ごとの score の平均値も取得できます。

SELECT 	exam_id,
		AVG(COALESCE(score, 0))
FROM 	exam_results
GROUP BY exam_id;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 7


最後に、結果セットにレコードがなかった時は、MIN()・MAX()・AVG() 共に NULL を返します。

SELECT 	MIN(score),
        MAX(score),
        AVG(score)
FROM 	exam_results
WHERE 	exam_id = 0;

[実行結果]

MySQL の集計関数 - MIN()・MAX()・AVG() 8


以上、MySQL のよく使う集計関数の MIN()、MAX()、AVG() についてご説明しました。

© 2024 MySQL 入門