想像してみて…スーパーでめっちゃ長い買い物リストがあるとする。最終的にいくら使ったか知りたいよね。でも全部手で足し算なんてやってられないでしょ?でも店員さんたちは全部データベースに入れてるから、ちゃんと合計金額が書かれたレシートが出てくる。たぶん、そのアプリのどこかで今日の主役 SUM() 関数が活躍してるんだ!これは数値型カラムの値を合計してくれる集約関数だよ。
SUM()のシンタックス
SUM()関数は名前の通りシンプルだけど、細かく見てみよう:
SELECT SUM(カラム)
FROM テーブル;
この関数は指定したカラムの全ての値を合計してくれる。でも正直に言うと、テキストや日付を足し算する魔法はないよ!数値だけね。
SUM()の使い方例
まずはシンプルな例から始めよう。salariesテーブルを使うよ。これは社員の給料が入ってる:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
例1: 全社員の給料を合計する
会社の給料総額を知りたいときはこうやる:
SELECT SUM(salary) AS total_salary
FROM salaries;
結果:
| total_salary |
|---|
| 240000 |
何が起きた? PostgreSQLはsalaryカラムの値(50000 + 60000 + 55000 + 75000)を全部足して、新しいカラムtotal_salaryで返してくれた。
例2: 条件付きで合計する
例えば、給料が55,000より多い社員だけの合計を知りたいとき。おなじみのWHEREを使うよ:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
結果:
| high_salary_total |
|---|
| 135000 |
ここで何が起きた? まずPostgreSQLはWHERE salary > 55000でフィルタして、60000と75000だけ残した。そのあとこの2つを足した(60000 + 75000)。
3. SUM()の特徴
NULLはSUM()にどう影響する?さっきも見たけど、NULLは「何もない」って意味で、SUM()はそれを計算に入れない。こんなテーブルを見てみよう:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
給料総額を知りたいとき:
SELECT SUM(salary) AS total_salary
FROM salaries;
結果:
| total_salary |
|---|
| 185000 |
なんで「185000」で「NULL」じゃないの? PostgreSQLはNULLを合計から無視してるからだよ。
SUM()を使った複雑なクエリ例
例1: 合計とフィルタを同時にやる
salesテーブルがあるとする。これは売上データが入ってる。こんな構造:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
1番目の商品(product_id = 1)だけの売上合計amountを知りたい:
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
結果:
| total_sales |
|---|
| 150 |
例2: 合計と追加計算
またsalariesテーブルで、給料総額が200,000をどれだけ超えてるか知りたい:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
結果:
| surplus |
|---|
| 40000 |
SUM()でよくあるミス
SUM()を数値じゃないデータで使う:うっかりテキストとかを合計しようとするとエラーになるよ。カラムのデータ型はちゃんと確認しよう。
NULLを無視しちゃう:初心者はNULLも計算に入ると思いがちだけど、実は無視されるから、思わぬ結果になることもあるよ。
GO TO FULL VERSION