MySQLのSUM関数について書いています。
SUM関数は、指定したカラムの数値データの合計値を計算するために使用されます。
売上データの合計、在庫数の総計、特定の条件を満たすレコードの合計など、データベース内の数値情報を集計する際に非常に役立ちます。
例えば、以下のようなケースで使えます。
- 商品の売上合計を求めたいとき
- 在庫の総数を出したいとき
- 特定期間の注文金額を集計したいとき
SUM関数の基本的な構文
SUM関数の基本的な構文は以下の通りです。
SELECT SUM(column_name)
FROM table_name;
SUM(column_name)
: 合計値を計算したい数値型のカラムを指定します。FROM table_name
: データを取得するテーブルを指定します。
このクエリを実行すると、指定したカラムのすべての数値レコードの合計値が返されます。
なお、重複を除いて合計したい場合は SUM(DISTINCT column_name)
を使用します。
SUM関数とWHERE句の組み合わせ
WHERE
句をSUM関数と組み合わせて使用することで、特定の条件を満たすレコードの合計値を計算できます。
SELECT SUM(amount)
FROM orders
WHERE order_date >= '2025-05-01';
上記の例では、orders
テーブルからorder_date
が’2025-05-01’以降のレコードのamount
カラムの合計値を計算します。
SUM関数とGROUP BY句の組み合わせ
GROUP BY
句をSUM関数と組み合わせて使用すると、特定のカラムの値でグループ化された各グループごとの合計値を計算できます。
SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category;
上記の例では、sales
テーブルのsales_amount
カラムをproduct_category
ごとに集計し、各カテゴリの売上合計を表示します。
SUM関数におけるNULL値の扱い
SUM関数は、計算対象のカラムにNULL
値が含まれている場合、そのNULL
値を無視して合計値を計算します。
つまり、NULL
値は合計値の計算には影響を与えません。
CREATE TABLE sales_data (
product VARCHAR(50),
amount INT
);
INSERT INTO sales_data (product, amount) VALUES
('A', 100),
('B', 200),
('C', NULL),
('D', 150);
SELECT SUM(amount) FROM sales_data;
-- 結果:450 (NULL値は無視される)
SUM関数を使う際の注意点
- 数値型カラムのみ: SUM関数は、数値型(INT, DECIMAL, FLOAT など)のカラムに対してのみ使用できます。文字列型や日付型などの数値以外のカラムを指定すると、通常は
0
が返されるか、エラーが発生する可能性があります(MySQLのバージョンやSQLモードの設定によります)。 - 集計結果は1行:
GROUP BY
句を使用しない場合、SUM関数の結果は通常1行のスカラ値(単一の値)として返されます。 - エイリアスの使用: 結果のカラム名を分かりやすくするために、
AS
キーワードを使ってエイリアス(別名)をつけることが推奨されます。
SUM関数を使う際には、カラムの型や結果の行数、NULLの扱いなどに注意しましょう。
SUM関数と他の集計関数
MySQLには、SUM関数以外にも様々な集計関数があります。
COUNT()
: レコードの数をカウントします。AVG()
: 数値データの平均値を計算します。MIN()
: 数値データの最小値を返します。MAX()
: 数値データの最大値を返します。
これらの関数は、それぞれ異なる目的でデータの集計に利用されます。
SUM関数は、あくまで数値データの合計値を計算するための関数であることを理解しておきましょう。
SUM関数の使用例
例1:全商品の合計金額を計算する
SELECT SUM(price * stock) AS total_stock_value
FROM products;
-- 結果例: 105000
例2:特定の顧客の購入金額の合計を計算する
SELECT SUM(order_amount) AS total_purchase_amount
FROM customer_orders
WHERE customer_id = 123;
-- 結果例: 19800
例3:商品カテゴリごとの売上合計を計算する
SELECT category, SUM(price * quantity) AS total_sales
FROM sales_details
GROUP BY category;
-- 結果例:
-- +------------+--------------+
-- | category | total_sales |
-- +------------+--------------+
-- | 食品 | 50000 |
-- | 日用品 | 35000 |
-- | 雑貨 | 20000 |
-- +------------+--------------+
まとめ
MySQLのSUM関数は、テーブル内の数値データの合計値を簡単に計算できる非常に便利な関数です。
WHERE
句で条件を絞ったり、GROUP BY
句でグループ化したりすることで、より複雑な集計処理も行うことができます。
NULL
値の扱いや、数値型カラムのみに適用できる点に注意し、データの分析やレポート作成にSUM関数を効果的に活用してください。
コメント