【しゅうやくかんすう】
集約関数(SUM/COUNT/AVG) とは?
最終更新:
💡 行をまとめて、合計・件数・平均を出そう
複数の行の値をまとめて、合計・件数・平均などを求めるSQLの関数。GROUP BYと組み合わせると、商品や部署などのグループごとに集計できる。
📌 このページのポイント
- SUM・COUNT・AVG・MAX・MINなどで複数行を集計する
- GROUP BYを使うと、グループごとの結果になる
- COUNT(*)は行数、COUNT(列)はその列のNULLでない値を数える
- NULLや対象の行がない場合の結果は、関数ごとに確認する
集約関数って、どんな計算をする?
例えば値が100・200・NULLの3行なら、SUMは300、AVGは150だよ。SUMやAVGはNULLでない値で計算するので、平均の分母も2になる。NULLを0として平均するなら別の計算になるから、知りたい数字を先に決めよう。
COUNT(*)とCOUNT(列)も、違う?
COUNT(*)は行を数えるので、この例は3。COUNT(列)はその列がNULLでない行を数えるので2だよ。「データが何行あるか」と「値が入っている行が何行あるか」を使い分けるんだ。集約関数のすべてがNULLを除くわけではなく、PostgreSQLのarray_aggなどはNULLも集めるよ。
商品ごとの売上を出すなら?
GROUP BYで商品ごとに分けてSUMを使うと、商品ごとに一行の結果になるよ。WHEREは集計に入れる行、HAVINGは集計後のグループを絞るために使う。例えば「売上合計が一定以上の商品」は、合計に対するHAVINGの条件で選べるんだ。
集計しない列も、自由に一緒に表示できる?
まとめ:ざっくりこれだけ覚えればOK!
「集約関数」って出てきたら「複数の行をまとめ、合計・件数・平均などを求めるSQLの関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Aggregate Function」 = 集約する(Aggregate)関数(Function)
💬 Aggregateは「集めてまとめる」という意味。複数のデータを1つに集約するイメージ