SQLのシンタックスや変数で迷子になる前に思い出してほしいのは、集計関数は「なんでも数える」時の最強の味方ってこと。大量の行から合計や平均を出したり、いろんな魔法をかけるのに超便利なんだ。
集計関数は、行のグループに対して数学的な操作をするために使うよ。主なやつは:
SUM(): 値の合計を計算する。AVG(): 平均値を計算する。COUNT(): サンプル内の行数を数える。
集計関数は、大量のデータを扱うときに「注文数は?」「合計金額は?」「今日の最大の注文は?」みたいなサクッとしたレポートを作るのに便利だよ。 いくつかの集計関数を見てみよう。
行数を数える:COUNT()関数
COUNT()関数は、テーブル内の行数を数えることができる。例で使い方を見てみよう。
-- 注文テーブルの全行を単純にカウント
SELECT COUNT(*) AS total_orders
FROM orders;
-- ユニークな顧客数をカウント
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- 合計金額が100より大きい注文をカウント
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
COUNT()関数は、レコード数やユニーク値のカウント、フィルタと組み合わせて「Pythonコースに申し込んだ学生数」みたいな集計にもよく使うよ。
データの合計:SUM()関数
SUM()関数は、カラム内の値の合計を計算する。今度は顧客の全購入金額を合計してみよう。
-- 総売上をカウント
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- 特定の顧客の購入合計
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- カテゴリごとの注文合計
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM()は、売上や収益、その他の合計を分析する時のメインツールだよ。例えば、ビジネスセンターの先月の収入を知りたい?余裕!
平均値:AVG()関数
AVG()関数は、データセットの平均値を計算するのに使う。例えば、学生の平均評価や顧客の平均注文額とかね。
-- 注文の平均金額
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- カテゴリごとの注文平均金額
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- 直近7日間の顧客の平均チェック
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
平均値は、サービス品質の分析や異常値の発見、顧客あたりの平均利益みたいな主要指標の計算に便利だよ。
集計関数を使った分析
基本的な関数に慣れてきたら、実際にこれらを使って基本的な分析レポートを作ってみよう。
例1:総売上と注文数
例えば、1ヶ月間で何件注文があって、総売上がいくらだったか知りたいとき。
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
例2:カテゴリごとの平均売上
商品カテゴリごとに売上を分けてみたい場合は?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
例3:直近7日間の注文
短期間、例えば直近1週間の指標を分析したいこともよくあるよね。
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
具体的な課題での実践ケース
課題:地域ごとの売上分析
例えば、あなたがショップチェーンのオーナーで、地域ごとの売上分布を分析したいとする。
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
課題:売上トップ10顧客
今度は、注文合計金額でトップ10の顧客を抽出してみよう。
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
課題:曜日ごとの売上比較
どの曜日に一番稼いでるか知りたい?こんな感じでできるよ:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
GO TO FULL VERSION