概要
集約関数(aggregate functions)は、テーブルの全レコードまたはグループ化されたグループごとの集約値を返す。
COUNT | 指定したカラムがNULL以外の行数 |
MIN | 指定したカラムの最小値(NULLの行は含めない) |
MAX | 指定したカラムの最大値(NULLの行は含めない) |
SUM | 指定したカラムの合計値(NULLの行は含めない) |
AVG | 指定したカラムの平均値(NULLの行は含めない) |
実行例
以下のテーブルを使う。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> SELECT * FROM subject_scores; +-------------+-------+ | subject | score | +-------------+-------+ | mathematics | 85 | | physics | 95 | | chemistry | 80 | | geology | 70 | | literature | NULL | | philosophy | 80 | +-------------+-------+ |
COUNT~個数
CONT()
は引数に指定した列のうちNULL
以外の個数を数える。
以下の例ではCOUNT(subject)
はレコード数と同じ6となるが、COUNT(score)
はNULL
が対象とならないため5となっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT COUNT(subject) FROM subject_scores; +----------------+ | COUNT(subject) | +----------------+ | 6 | +----------------+ 1 row in set (0.00 sec) mysql> SELECT COUNT(score) FROM subject_scores; +--------------+ | COUNT(score) | +--------------+ | 5 | +--------------+ 1 row in set (0.00 sec) |
MIN/MAX~最小値・最大値
MIN()
は引数にした列のうち最小の値を返し、MAX()
は最大の値を返す。NULL
は対象に含まれない。
以下の例では列としてscore
を指定し、最小値と最大値が得られている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT MIN(score) FROM subject_scores; +------------+ | MIN(score) | +------------+ | 70 | +------------+ 1 row in set (0.00 sec) mysql> SELECT MAX(score) FROM subject_scores; +------------+ | MAX(score) | +------------+ | 95 | +------------+ 1 row in set (0.00 sec) |
なおMIN()/MAX()
にsucject
を渡すと、文字列の照合順序に従って大小関係が判定される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT MIN(subject) FROM subject_scores; +--------------+ | MIN(subject) | +--------------+ | chemistry | +--------------+ 1 row in set (0.00 sec) mysql> SELECT MAX(subject) FROM subject_scores; +--------------+ | MAX(subject) | +--------------+ | physics | +--------------+ 1 row in set (0.00 sec) |
SUM~合計
SUM()
は引数の合計を返す。NULL
は無視される。
以下の例では6つのレコードのscore
のうちNULL
を除いた5つの合計が得られている。
1 2 3 4 5 6 7 |
mysql> SELECT SUM(score) FROM subject_scores; +------------+ | SUM(score) | +------------+ | 410 | +------------+ 1 row in set (0.00 sec) |
なお文字列データの列を引数に与えるとSUM()
は0を返す。
1 2 3 4 5 6 7 |
mysql> SELECT SUM(score) FROM subject_scores; +------------+ | SUM(score) | +------------+ | 410 | +------------+ 1 row in set (0.00 sec) |
AVG~平均値
AVG()は引数の列データの平均値を返す。NULLは無視されるため、割る数からものぞかれる。
以下の例では6つのscore
のうち1つがNULL
のため、平均値は410/5で計算される。
1 2 3 4 5 6 |
mysql> SELECT AVG(score) FROM subject_scores; +------------+ | AVG(score) | +------------+ | 82.0000 | +------------+ |
文字列型の列を引数に指定すると、結果は0となる。