MySQLのSUM関数を完全解説!初心者でもわかるGROUP BYと合計の求め方
生徒
「MySQLで合計を出したいんですが、数字を足す方法がよく分かりません」
先生
「表の中にある数値をまとめて足すときは、SUM関数という仕組みを使います。電卓で合計を出す感覚に近いですよ」
生徒
「パソコン操作が苦手でも理解できますか?」
先生
「大丈夫です。紙の家計簿や売上表をイメージしながら説明していきます」
1. SUM関数とは何か?
MySQLのSUM関数は、表の中にある数値をすべて足して「合計」を出すための機能です。例えば、1か月の売上金額を全部足したいときや、年齢の合計を確認したいときに使います。
データベースは「表」で管理されていて、縦の列をカラム、横の行をレコードと呼びます。SUM関数は、指定したカラムの数字だけを集めて足し算してくれます。
2. サンプルで使うテーブルを確認しよう
まずは、SUM関数の説明に使うテーブルを見てみましょう。これは、商品ごとの売上金額を管理している表だと考えてください。
id | product_name | price | quantity
---+--------------+-------+---------
1 | りんご | 100 | 3
2 | みかん | 80 | 5
3 | ばなな | 120 | 2
4 | りんご | 100 | 4
5 | みかん | 80 | 1
priceは1個あたりの値段、quantityは売れた個数です。このquantityの合計を出すのが今回の目的です。
3. SUM関数で単純な合計を出す方法
まずは、一番基本的なSUM関数の使い方です。quantityの合計を出したい場合、次のように書きます。
SELECT SUM(quantity)
FROM sales;
SUM(quantity)は「quantity列の数字を全部足す」という意味です。
SUM(quantity)
-------------
15
これは、すべての商品が売れた個数を合計した結果です。電卓で3+5+2+4+1と計算するのと同じことをMySQLが自動でやってくれています。
4. GROUP BYと一緒にSUM関数を使う
次に、商品ごとに売れた個数の合計を知りたい場合を考えます。このときに使うのがGROUP BYです。GROUP BYは「同じ名前のものをグループに分ける」ための仕組みです。
SELECT product_name, SUM(quantity)
FROM sales
GROUP BY product_name;
product_name | SUM(quantity)
-------------+--------------
りんご | 7
みかん | 6
ばなな | 2
りんごは2行ありますが、GROUP BYでまとめられ、その中のquantityが合計されています。紙の売上表を商品別に集計するイメージです。
5. SUM関数で金額の合計を計算する
SUM関数は、計算した結果を合計することもできます。例えば「値段×個数」で売上金額を出し、その合計を求めることも可能です。
SELECT SUM(price * quantity)
FROM sales;
SUM(price * quantity)
--------------------
1460
これは、全商品の売上金額を合計した結果です。1行ずつ計算したあとに、全部足していると考えると分かりやすいです。
6. WHEREとSUM関数を組み合わせる
特定の条件だけで合計を出したい場合は、WHEREを使います。例えば「りんごだけの売上個数」を知りたいときは次のように書きます。
SELECT SUM(quantity)
FROM sales
WHERE product_name = 'りんご';
SUM(quantity)
-------------
7
WHEREは「条件に合う行だけを使う」という意味です。家計簿で「食費だけ合計する」感覚と同じです。
7. SUM関数を使うときの注意点
SUM関数は数値に対して使う関数なので、文字が入っている列には使えません。また、データが1件もない場合はNULLという特別な値になることがあります。
NULLは「何も入っていない」という意味で、0とは違います。最初は難しく感じますが、「空白のまま」というイメージで覚えておくと安心です。