【SQL】SUM関数を使って指定カラムの合計値を求める

カラムの合計値を求めたい場合はSUM関数を使います。

本記事ではSUM関数の基本的な使い方から、WHERE句やGROUP BY句、CASE式などの併用方法まで具体例を交えて解説していきます。

SUM関数の使い方

SUM関数は指定したカラムの値の合計を求めるために使用します。そのため、指定するカラムは数値情報を扱っている必要があります。

SUM関数の基本構文は下記です。

SQL
SELECT SUM(カラム名)
FROM テーブル名;

SUMの後にカッコ付きでカラム名を指定します。非常にシンプルですね。

ただし、このままでは取得後のカラム名はSUM(カラム名)になってしまうので、AS句を使って別名をつけると見やすいです。

AS句を使うと下記のようになります。

SQL
SELECT SUM(カラム名) AS 別名
FROM テーブル名;

AS句については下記の記事で詳しくまとめています。

【SQL】AS句を使ってカラムやテーブルに別名をつける

それでは、具体例を見ながら理解を深めていきましょう!

サンプルデータ

サンプルデータとして下記のとおり、studentsテーブルを用意します。

first_scoreカラムは1回目の試験の得点を表しており、second_scoreは2回目の試験の得点を表しています。

idnamefirst_scoresecond_scoreclass
1山田9095Aクラス
2鈴木7472Bクラス
3佐藤6170Cクラス
4大野8787Bクラス
5小池7080Aクラス
studentsテーブル

カラムの合計値を求める

まずは、指定したカラムの合計値を求める方法を見ていきます。

検索クエリ

1回目の試験の合計得点を取得する

SQL
SELECT SUM(first_score)
FROM students;

SUM関数でfirst_scoreカラムを指定します。

実行結果

SUM(first_score)
382

1回目の試験の合計得点を取得することができました。

また、AS句を使ってカラムに別名をつけた場合は下記のようになります。

SQL
SELECT SUM(first_score) AS '1回目の試験の合計得点'
FROM students;
1回目の試験の合計得点
382

別名をつけた方が明らかに見やすいですね。

複数カラムで合計値を求める

次に、複数カラムの合計を求める方法を見ていきます。

検索クエリ

1回目の試験と2回目の試験の合計得点をそれぞれ取得する

SQL
SELECT SUM(first_score), SUM(second_score)
FROM students;

カンマ区切りで、SUM関数を使ってfirst_scoreカラムとsecond_scoreカラムをそれぞれ指定します。

実行結果

SUM(first_score)SUM(second_score)
382404

1回目の試験と2回目の試験の合計得点をそれぞれ取得することができました。

グループごとで合計を求める(GROUP BY句)

次に、特定のカラムをグルーピングした上で、合計値を求める方法を見ていきます。

グルーピングにはGROUP BY句を用います。

検索クエリ

クラスごとに1回目の試験と2回目の試験の合計得点を取得する

SQL
SELECT class, SUM(first_score), SUM(second_score)
FROM students
GROUP BY class;

GROUP BYでclassカラムを指定することで、クラス単位でレコードをまとめることができます。また、1回目と2回目両方の得点を取得する必要があるので、カンマ区切りで指定します。

実行結果

classSUM(first_score)SUM(second_score)
Aクラス160175
Bクラス161159
Cクラス6170

クラスごとにおける1回目の得点と2回目の得点の合計値を取得することができました。

GROUP BY句については下記で詳しくまとめています。

GROUP BY句を使って集計!COUNTやHAVINGとの合わせ技も解説【SQL】

条件に一致したカラムの合計値を求める(WHERE句)

次に、WHERE句を使って検索条件を指定した上で合計値を求める方法を見ていきます。

検索クエリ

1回目の試験が80点以上の生徒だけの合計得点を取得する

SQL
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式を使って条件分岐を行った上で合計値を求める方法を見ていきます。

実践で使うことはあまり多くないかもしれませんが、知っておくことで集計方法の幅を広げられるでしょう。

検索クエリ

下記のとおり、試験の得点とは別に評価点を生徒に与えることとします。

評価点条件
21回目も2回目も80点以上
11回目か2回目のどちらかが80点以上
01回目も2回目も80点より下

この条件に則って、評価点の合計を取得する

SQL
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式を使う