SQL集計関数の実務活用。COUNT, SUM, AVG等を用いた数値分析の基礎
データベースからの情報取得において、「個々の明細を確認する」こと以上に重要なのが、「全体の傾向を一つの数字に要約する」ことです。
SQLには、大量のレコードを一瞬で計算し、分析の指標となる数値を弾き出す「集計関数」が備わっています。これらの関数を使いこなすことで、ビジネスの現状を客観的な数値(ファクト)に基づいて評価できるようになります。
代表的な集計関数と活用のポイント
COUNT(計数): 「データの総数はいくつか?」
- 受注件数、会員登録数、未処理の問い合わせ件数など、規模や分量を測る際の基本指標です。
COUNT(*)は全行を数えますが、COUNT(列名)はNULLを除外して数えます。同じテーブルで結果が異なる場合、その差がNULL件数を意味します。
SUM(合計): 「数値の総計はいくらか?」
- 売上合計、原価総額、消費ポイントなど、金額や数量のインパクトを測る際に使用します。
- NULLは合計に含まれません。全レコードがNULLの場合、SUMはNULLを返します(0ではない点に注意が必要です)。
AVG(平均): 「1件あたりの平均値は?」
- 客単価、リードタイムの平均、リピート率など、パフォーマンスの質を評価する際の重要指標です。
- AVGもNULLを除外して計算します。「0が入力されたレコード」と「未入力のレコード」では平均値が変わるため、デフォルト値とNULLの設計方針が分析精度に直結します。
MAX / MIN(最大・最小): 「極端な値はどこか?」
- 最高売上を記録した日、最低の仕入れ価格、最も古い最終ログイン日など、境界値の特定に活用します。
GROUP BY句との組み合わせ
集計関数を単体で使うと「全体の合計」が得られます。しかし、実務で必要なのは「カテゴリ別の合計」や「担当者別の件数」です。これを実現するのが GROUP BY句 です。
SELECT category, COUNT(*) AS count, SUM(amount) AS total
FROM orders
GROUP BY category;
このクエリは、注文テーブルをカテゴリ別にグループ化し、各カテゴリの件数と売上合計を一度に算出します。エクセルのピボットテーブルに相当する処理ですが、SQLでは数百万件のデータを対象に、複雑な絞り込み条件(WHERE)を維持したまま、高い再現性で実行できます。
HAVING句:集計後の絞り込み
集計結果に対してさらに条件を加えたい場合は、WHEREではなく HAVING句 を使用します。
SELECT category, COUNT(*) AS count
FROM orders
GROUP BY category
HAVING COUNT(*) >= 100;
WHEREは集計前の個別レコードへの条件指定、HAVINGは集計後の結果への条件指定という使い分けが重要です。「件数が100件以上のカテゴリのみ表示する」という要件はHAVINGでなければ実現できません。
条件指定(WHERE)との相乗効果
集計関数を単体で使うだけでなく、特定の条件(WHERE)と組み合わせることで、課題がより鮮明に可視化されます。
- 「先月(WHERE)」の「成約率(AVG)」は?
- 「特定のキャンペーン(WHERE)」による「新規顧客数(COUNT)」は?
- 「不備が疑われる商品カテゴリ(WHERE)」の「最大値(MAX)」は異常に高くないか?
システム担当者を介さず、自らこれらの問いをクエリとして発行できれば、会議や商談において、主観に基づいた議論を排し、常に「事実」に基づいた説得力のある提言が可能になります。
まとめ:事実を「判断材料」へと昇華させる
集計関数は、データベースに眠る膨大な「事実の断片」を、ビジネスを動かすための「判断材料」へと変換する装置です。
まずはシンプルな COUNT(*) から始め、データの輪郭を掴む習慣をつけてください。次にGROUP BYと組み合わせて「分類別の傾向」を見るように視野を広げ、HAVINGで「注目すべきセグメント」を絞り込む。この3段階の思考がデータ分析の基礎的な型となります。