Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLで合計を求めるには「SUM関数」を使う

SQLで値の合計を求める・取得したい場合は SUM関数 を使いましょう。

基本的な書式は次の通りです。

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

では、サンプルを通して使い方を見ていきましょう。

まずは、次のようなテーブルを作成し、データを挿入します。

CREATE TABLE score_table(user_id int, name varchar(20), first_score int, second_score int, third_score int);

INSERT INTO score_table VALUES(1, 'Katou', 67, 88, 74);
INSERT INTO score_table VALUES(2, 'Tanaka', 53, 66, 81);
INSERT INTO score_table VALUES(3, 'Itou', 72, 85, 92);
INSERT INTO score_table VALUES(4, 'Yokoyama', 47, 62, 77);
INSERT INTO score_table VALUES(5, 'Sasaki', 96, 84, 89);

さっそく、使い方を確認しましょう。

合計を指定した列で求める方法

では、指定した列の合計を求めてみます。

first_scoreカラム の合計点数を取得してみましょう。

先述したように、基本的な SUM関数 の記述方法を使って次のように記述します。

mysql> SELECT SUM(first_score) FROM score_table;
+------------------+
| SUM(first_score) |
+------------------+
| 335 |
+------------------+
1 row in set (0.01 sec)

上記のように、first_scoreカラム に格納されている値の合計値が取得できました。

67+53+72+47+96=335になるので、ちゃんと計算して取得できているがわかります。

second_scoreカラム、third_scoreカラム も同様にSQL文を書くことで、それぞれの合計を求めることができます。

mysql> SELECT SUM(second_score) FROM score_table;
+-------------------+
| SUM(second_score) |
+-------------------+
| 385 |
+-------------------+
1 row in set (0.01 sec)

mysql> SELECT SUM(third_score) FROM score_table;
+------------------+
| SUM(third_score) |
+------------------+
| 413 |
+------------------+
1 row in set (0.00 sec)

合計を指定した行で求める方法

では次に、指定した行で合計を求める方法を見ていきましょう。

今回の例で言うと、各データ(行)の first_scoreカラム、second_scoreカラム、third_scoreカラム の合計ということですね。

行で合計を求めたい場合は、SUM関数 は使わずに各カラムを足して値を求めましょう

次のような記述になります。

SELECT user_id, name, (first_score + second_score + third_score) AS total_score FROM score_table;

取得したデータを見やすくするために、user_idカラム と nameカラム も取得しています。

そして、合計したいカラムを +演算子 で合計しました。

この合計したカラムの名前を total_score として、別名も設定しています。

上記のSQL文を実行してみると、次の結果が得られるはずです。

mysql> SELECT user_id, name, (first_score + second_score + third_score) AS total_score FROM score_table;
+---------+----------+-------------+
| user_id | name | total_score |
+---------+----------+-------------+
| 1 | Katou | 229 |
| 2 | Tanaka | 200 |
| 3 | Itou | 249 |
| 4 | Yokoyama | 186 |
| 5 | Sasaki | 269 |
+---------+----------+-------------+
5 rows in set (0.00 sec)

このように、各行のscoreの値が取得できました!

ポテパンダの一言メモ

列の合計値を求める場合は SUM関数 が、行の合計値を求める場合は、合計したいカラムを選んで足す のが簡単です!

合計を複数列で求めるには?

では、複数列の合計を求める方法を見ていきましょう。

複数列の結果を取得したい場合は、基本構文の選択カラムを増やせばOKです。

SELECT SUM(カラム名1), SUM(カラム名2), … FROM テーブル名;

今回の例では、3つのカラムの合計を取得してみます。

mysql> SELECT SUM(first_score), SUM(second_score), SUM(second_score) FROM score_table;
+------------------+-------------------+-------------------+
| SUM(first_score) | SUM(second_score) | SUM(second_score) |
+------------------+-------------------+-------------------+
| 335 | 385 | 385 |
+------------------+-------------------+-------------------+
1 row in set (0.01 sec)

このように、それぞれのカラムの合計値を取得できました!

 

「これらのカラムの合計値は出せないの?」

こんな風に思う人もいるでしょう。

もちろん、上記のような計算も可能です。

次のように、それぞれの SUM関数 を足せば合計値を求められます

mysql> SELECT (SUM(first_score) + SUM(second_score) + SUM(second_score)) AS total_test_score FROM score_table;
+------------------+
| total_test_score |
+------------------+
| 1105 |
+------------------+
1 row in set (0.01 sec)

このように全カラムの合計値が取得できました!

全部のカラムの合計値を出す機会はあまりないかもしれません。

例えば、次のようにカラム数で割れば、各カラム(テスト)の合計値の平均が求められます。

mysql> SELECT (SUM(first_score) + SUM(second_score) + SUM(second_score)) / 3 AS total_average_score FROM score_table;
+---------------------+
| total_average_score |
+---------------------+
| 368.3333 |
+---------------------+
1 row in set (0.00 sec)

複数列の合計もしっかり取得できるので、ぜひやり方を覚えてください。

合計を求める際に条件を設定する

SQLで合計を求める際に、何か条件を指定したい場合もあると思います。

条件を設定するシンプルな方法は WHERE句 による指定になるでしょう。

次のように指定します。

SELECT SUM(カラム名) FROM テーブル名 WHERE 条件式;

試しに、first_scoreカラム の値が60よりも大きいものだけ、合計値を取得してみましょう。

次のように記述します。

mysql> SELECT SUM(first_score) FROM score_table WHERE first_score > 60;
+------------------+
| SUM(first_score) |
+------------------+
| 235 |
+------------------+
1 row in set (0.00 sec)

上記のように、条件に合わせた合計が求められました。

SUM関数 では、WHERE句 以外にも CASE WHEN などさまざまな条件指定ができます。

参考:SUM(CASE WHEN)を使った条件付き集計

「SUM関数」と「GROUP BY句」を使って合計を求める

SUM関数 は GROUP BY句 と組み合わせて、合計を求められます。

サンプルを通して使い方を確認していきましょう。

確認用に、次のようなテーブルを別途作成します。

CREATE TABLE subscore_table(user_id int, name varchar(20), class int, score int);

INSERT INTO subscore_table VALUES(1, 'Katou', 1, 67);
INSERT INTO subscore_table VALUES(2, 'Tanaka', 2, 53);
INSERT INTO subscore_table VALUES(3, 'Itou', 1, 72);
INSERT INTO subscore_table VALUES(4, 'Yokoyama', 2, 47);
INSERT INTO subscore_table VALUES(5, 'Sasaki', 1, 96);

では、このテーブル・データの classカラム ごとに合計を求めてみましょう。

次のようにSQL文を記述し、実行します。

mysql> SELECT class, SUM(score) FROM subscore_table GROUP BY class;
+-------+------------+
| class | SUM(score) |
+-------+------------+
| 1 | 235 |
| 2 | 100 |
+-------+------------+
2 rows in set (0.01 sec)

上記のように、クラス1と2のそれぞれの合計が取得できました!

データを特定のカラム値で分けて、合計を求めたい場合に活用しましょう。

行の合計(データ数)を求めるには?

「値の合計ではなくて、行の合計を求めたい!」

こんな場合は COUNT関数 を使いましょう。

使い方は次の通りです。

SELECT COUNT(*) FROM テーブル名;

詳しくは以下の記事で解説しているので、よければ参考にしてみてくださいね。

【関連記事】

▶︎SQLで行数(COUNT)を取得する方法を解説!

合計以外の「平均・最大・最小」などの求め方

合計以外にも 平均・最大・最小 など、行や列の値を求める関数は「集計関数」と呼ばれます。

基本的な使い方は、合計を求めるSUM関数と同じです。

合計と合わせてよく使われるものですので、ぜひこの機会に覚えておくとよいでしょう。

それぞれの関数は、以下の記事で解説しています。

■平均

【関連記事】

▶︎SQLで平均を求める関数や方法について徹底解説!

 

■最大・最小

【関連記事】

▶︎【超便利!】SQLのMAX関数・MIN関数の使い方をわかりやすく解説

まとめ

SQLで合計を求める方法、 SUM関数 について解説しました!

列や行の合計を求める機会は多く、覚えておくと重宝します。

また、平均や最大・最小の求め方も知っておくと、スムーズにデータ処理ができるでしょう。

ぜひこの記事を参考に、まずは合計の求め方をマスターしてくださいね!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。