目次
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の値が取得できました!
合計を複数列で求めるには?
では、複数列の合計を求める方法を見ていきましょう。
複数列の結果を取得したい場合は、基本構文の選択カラムを増やせば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関数」と「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 テーブル名;
詳しくは以下の記事で解説しているので、よければ参考にしてみてくださいね。
【関連記事】
合計以外の「平均・最大・最小」などの求め方
合計以外にも 平均・最大・最小 など、行や列の値を求める関数は「集計関数」と呼ばれます。
基本的な使い方は、合計を求めるSUM関数と同じです。
合計と合わせてよく使われるものですので、ぜひこの機会に覚えておくとよいでしょう。
それぞれの関数は、以下の記事で解説しています。
■平均
【関連記事】
■最大・最小
【関連記事】
▶︎【超便利!】SQLのMAX関数・MIN関数の使い方をわかりやすく解説
まとめ
SQLで合計を求める方法、 SUM関数 について解説しました!
列や行の合計を求める機会は多く、覚えておくと重宝します。
また、平均や最大・最小の求め方も知っておくと、スムーズにデータ処理ができるでしょう。
ぜひこの記事を参考に、まずは合計の求め方をマスターしてくださいね!
列の合計値を求める場合は SUM関数 が、行の合計値を求める場合は、合計したいカラムを選んで足す のが簡単です!