カラムの合計値を求めたい場合はSUM関数を使います。
本記事ではSUM関数の基本的な使い方から、WHERE句やGROUP BY句、CASE式などの併用方法まで具体例を交えて解説していきます。
目次
SUM関数の使い方
SUM関数は指定したカラムの値の合計を求めるために使用します。そのため、指定するカラムは数値情報を扱っている必要があります。
SUM関数の基本構文は下記です。
SELECT SUM(カラム名)
FROM テーブル名;
SUM
の後にカッコ付きでカラム名を指定します。非常にシンプルですね。
ただし、このままでは取得後のカラム名はSUM(カラム名)
になってしまうので、AS句を使って別名をつけると見やすいです。
AS句を使うと下記のようになります。
SELECT SUM(カラム名) AS 別名
FROM テーブル名;
AS句については下記の記事で詳しくまとめています。
【SQL】AS句を使ってカラムやテーブルに別名をつけるそれでは、具体例を見ながら理解を深めていきましょう!
サンプルデータ
サンプルデータとして下記のとおり、studentsテーブルを用意します。
first_scoreカラムは1回目の試験の得点を表しており、second_scoreは2回目の試験の得点を表しています。
id | name | first_score | second_score | class |
---|---|---|---|---|
1 | 山田 | 90 | 95 | Aクラス |
2 | 鈴木 | 74 | 72 | Bクラス |
3 | 佐藤 | 61 | 70 | Cクラス |
4 | 大野 | 87 | 87 | Bクラス |
5 | 小池 | 70 | 80 | Aクラス |
カラムの合計値を求める
まずは、指定したカラムの合計値を求める方法を見ていきます。
検索クエリ
1回目の試験の合計得点を取得する
SELECT SUM(first_score)
FROM students;
SUM関数でfirst_scoreカラムを指定します。
実行結果
SUM(first_score) |
---|
382 |
1回目の試験の合計得点を取得することができました。
また、AS句を使ってカラムに別名をつけた場合は下記のようになります。
SELECT SUM(first_score) AS '1回目の試験の合計得点'
FROM students;
1回目の試験の合計得点 |
---|
382 |
別名をつけた方が明らかに見やすいですね。
複数カラムで合計値を求める
次に、複数カラムの合計を求める方法を見ていきます。
検索クエリ
1回目の試験と2回目の試験の合計得点をそれぞれ取得する
SELECT SUM(first_score), SUM(second_score)
FROM students;
カンマ区切りで、SUM関数を使ってfirst_scoreカラムとsecond_scoreカラムをそれぞれ指定します。
実行結果
SUM(first_score) | SUM(second_score) |
---|---|
382 | 404 |
1回目の試験と2回目の試験の合計得点をそれぞれ取得することができました。
グループごとで合計を求める(GROUP BY句)
次に、特定のカラムをグルーピングした上で、合計値を求める方法を見ていきます。
グルーピングにはGROUP BY句を用います。
検索クエリ
クラスごとに1回目の試験と2回目の試験の合計得点を取得する
SELECT class, SUM(first_score), SUM(second_score)
FROM students
GROUP BY class;
GROUP BY
でclassカラムを指定することで、クラス単位でレコードをまとめることができます。また、1回目と2回目両方の得点を取得する必要があるので、カンマ区切りで指定します。
実行結果
class | SUM(first_score) | SUM(second_score) |
---|---|---|
Aクラス | 160 | 175 |
Bクラス | 161 | 159 |
Cクラス | 61 | 70 |
クラスごとにおける1回目の得点と2回目の得点の合計値を取得することができました。
GROUP BY句については下記で詳しくまとめています。
GROUP BY句を使って集計!COUNTやHAVINGとの合わせ技も解説【SQL】条件に一致したカラムの合計値を求める(WHERE句)
次に、WHERE句を使って検索条件を指定した上で合計値を求める方法を見ていきます。
検索クエリ
1回目の試験が80点以上の生徒だけの合計得点を取得する
SELECT SUM(first_score)
FROM students
WHERE first_score >= 80;
WHERE
を使ってfirst_score >= 80
の条件を指定し、得点が80点以上だけのレコードに絞っています。
実行結果
SUM(first_score) |
---|
177 |
得点が80点以上の生徒だけの合計得点を取得することができました。
WHERE句については下記の記事で詳しくまとめています。
WHERE句を使って検索条件を指定する:SELECT文の基本条件付きの集計を行う(CASE式)
次に、CASE式を使って条件分岐を行った上で合計値を求める方法を見ていきます。
実践で使うことはあまり多くないかもしれませんが、知っておくことで集計方法の幅を広げられるでしょう。
検索クエリ
下記のとおり、試験の得点とは別に評価点を生徒に与えることとします。
評価点 | 条件 |
---|---|
2 | 1回目も2回目も80点以上 |
1 | 1回目か2回目のどちらかが80点以上 |
0 | 1回目も2回目も80点より下 |
この条件に則って、評価点の合計を取得する
SELECT
SUM(
CASE
when first_score >= 80 AND second_score >= 80 then 2
when first_score >= 80 AND second_score < 80 then 1
when first_score < 80 AND second_score >= 80 then 1
when first_score < 80 AND second_score < 80 then 0
ELSE 0
END
) AS '評価点の合計'
FROM students;
CASE WHEN ~~ END
を使ってSUM関数の中で条件分岐を行います。
今回は下記3つの条件分岐を行う必要があります。
- 2回の試験とも80点以上
- 2回のうち1回の試験で80点以上
- 2回の試験とも80点より下
SUM関数の中で条件分岐することによって、条件分岐によって得られた評価点の合計を求めることができます。
実行結果
評価点の合計 |
---|
5 |
2回の試験とも80点以上が2名、どちらか1回の試験で80点以上が1名、2回とも80点より下が2名なので、(評価点2×2名) + (評価点1×1名) + (評価点0×0名)
で5
が合計値として取得できました。
CASE式については下記の記事でまとめています。
【SQL】CASE式を使って条件分岐させる内容のまとめ
- SUM関数は指定したカラムの値の合計を求めるために使用する
- SUM関数の基本の使い方は
SUM(カラム名)
- SQLの実行結果では
SUM(カラム名)
がカラム名となってしまうので、AS句を使って別名をつけると見やすくなる - 複数カラムの合計値を求める場合はカンマで区切る
- グループごとの合計値を求めたい場合はGROUP BY句を使う
- 条件に一致した値の合計を求めたい場合はWHERE句を使う
- SUM関数を使って条件付きの集計を行い場合はCASE式を使う