

SQLで足し算する方法
この記事では、SQLで数値や文字列を足し算する方法について解説します。
足し算をするには、主に次の2つを用いましょう。
- +(プラス)演算子を使う
- SUM関数を使う
それぞれの方法について、詳しく解説します。
(1)+演算子を使う
まずは、+演算子を使う方法です。
+演算子は、算数や数学などで使っているので、使い方はわかる人が多いと思います。
使い方は次の通りです。
- SELECT 値 + 値;
では、実際にSQLを操作して確認してみます。
次のように記述すると、数値同士の足し算が行われます。
- mysql> SELECT 10 + 20;
- +---------+
- | 10 + 20 |
- +---------+
- | 30 |
- +---------+
- 1 row in set (0.00 sec)
このように、足し算がちゃんと行われていることがわかりますね。
足し算以外にも、算術演算子を用いることで、引き算・掛け算・割り算も可能です。
- mysql> SELECT 10 - 20;
- +---------+
- | 10 - 20 |
- +---------+
- | -10 |
- +---------+
- 1 row in set (0.04 sec)
- mysql> SELECT 10 * 20;
- +---------+
- | 10 * 20 |
- +---------+
- | 200 |
- +---------+
- 1 row in set (0.00 sec)
- mysql> SELECT 10 / 20;
- +---------+
- | 10 / 20 |
- +---------+
- | 0.5000 |
- +---------+
- 1 row in set (0.01 sec)
足し算も含めた簡単な演算を行いたい場合は、算術演算子を使いましょう!
(2)SUM関数を使う
次は、SUM関数を使う方法です。
SUM関数は、指定したカラムの合計を求める場合に使います。
記述方法は、次の通りです。
- SELECT SUM(カラム名) FROM テーブル名;
合計を求めたいカラム名をかっこに記述します。
実際に、テーブルを用意して足し算してみましょう。
- mysql> SELECT * FROM sample_table;
- +------+----------+-------+
- | id | name | score |
- +------+----------+-------+
- | 1 | Shimizu | 67 |
- | 2 | Ishikawa | 90 |
- | 3 | Minami | 127 |
- | 4 | Katou | 145 |
- | 5 | Date | 88 |
- +------+----------+-------+
- 5 rows in set (0.01 sec)
上記テーブルの scoreテーブル の値を足し算してみます。
次のように記述しましょう。
- SELECT SUM(score) FROM sample_table;
上記SQL文を実行すると、次の結果を取得できます。
- mysql> SELECT SUM(score) FROM sample_table;
- +------------+
- | SUM(score) |
- +------------+
- | 517 |
- +------------+
- 1 row in set (0.03 sec)
算術演算子を使うよりも、簡単に足し算ができますよね。
足し算する時に条件を設定する
SQLで足し算を行う基本的な操作方法を紹介しました。
「足し算をする時に、条件を設定したい」なんて場合もありますよね。
SUM関数を使うことで、条件をつけて足し算を行うことも可能です。
例えば、scoreカラム の値が100以上のデータだけ足し算するように指定してみます。
次のように記述しましょう。
- SELECT SUM(score) FROM sample_table WHERE score >= 100;
上記のSQL文を実行することで、条件に沿った足し算が行われます。
今回のテーブルで言えば、127と145が条件に当てはまりますね。
実行結果は次の通りです。
- mysql> SELECT SUM(score) FROM sample_table WHERE score >= 100;
- +------------+
- | SUM(score) |
- +------------+
- | 272 |
- +------------+
- 1 row in set (0.01 sec)
期待した通りの結果が取得できています。


足し算を行でする
カラムごとに値を足し算する方法を解説してきました。
中には、あるカラムと別のカラムの値を足し算したいこともあるでしょう。
行内の値を足し算する方法について見ていきましょう。
先ほどサンプルで使用した sample_tableテーブル のカラムを追加しました。
- +------+----------+-------+---------+
- | id | name | score | score02 |
- +------+----------+-------+---------+
- | 1 | Shimizu | 67 | 90 |
- | 2 | Ishikawa | 90 | 114 |
- | 3 | Minami | 127 | 101 |
- | 4 | Katou | 145 | 163 |
- | 5 | Date | 88 | 123 |
- +------+----------+-------+---------+
- 5 rows in set (0.01 sec)
このテーブルを元に、scoreカラム と score02カラム の値を足し算してみます。
SQL文は次のように記述しましょう。
- SELECT id, name, score + score02 AS total FROM sample_table;
それぞれのカラムを +演算子 で足せばOKです。
わかりやすいように、足し算したカラムは totalカラム として、別名をつけています。
上記SQL文を実行すると、次のように結果を取得できます。
- mysql> SELECT id, name, score + score02 AS total FROM sample_table;
- +------+----------+-------+
- | id | name | total |
- +------+----------+-------+
- | 1 | Shimizu | 157 |
- | 2 | Ishikawa | 204 |
- | 3 | Minami | 228 |
- | 4 | Katou | 308 |
- | 5 | Date | 211 |
- +------+----------+-------+
- 5 rows in set (0.00 sec)
それぞれのデータで、カラムの値が足し算できています!
行の特定カラムの値を足し算したい場合は、+演算子を使いましょう。
足し算するデータにNULLが含まれている場合
「SQLで足し算するカラムの中に、NULL値が含まれているとどうなるのでしょうか?」
「NULL値がある場合は、NULLを除いて足し算が行われます。ただし、足し算を行でする場合は、結果がNULL値として返ります。」
足し算するデータにNULLが含まれている場合も、実際にデータを操作して確認してみます。
sample_tableテーブルに、NULL値を含んだデータを追加しました。
- mysql> SELECT * FROM sample_table;
- +------+----------+-------+---------+
- | id | name | score | score02 |
- +------+----------+-------+---------+
- | 1 | Shimizu | 67 | 90 |
- | 2 | Ishikawa | 90 | 114 |
- | 3 | Minami | 127 | 101 |
- | 4 | Katou | 145 | 163 |
- | 5 | Date | 88 | 123 |
- | 6 | Tanaka | NULL | 0 |
- +------+----------+-------+---------+
- 6 rows in set (0.00 sec)
このテーブルを用いて、カラムごとの足し算を行ってみると、次の結果を取得できます。
- mysql> SELECT SUM(score), SUM(score02) FROM sample_table;
- +------------+--------------+
- | SUM(score) | SUM(score02) |
- +------------+--------------+
- | 517 | 591 |
- +------------+--------------+
- 1 row in set (0.00 sec)
NULL値は特に検索結果に影響を与えず、ちゃんと足し算できているのがわかります。
また、0も同様に足し算結果に問題はありません。
一方、足し算を行でする場合は、次のようにNULL値を含んでいる場合は、結果がNULL値になっています。
- mysql> SELECT score + score02 FROM sample_table;
- +-----------------+
- | score + score02 |
- +-----------------+
- | 157 |
- | 204 |
- | 228 |
- | 308 |
- | 211 |
- | NULL |
- +-----------------+
- 6 rows in set (0.00 sec)
このように、行で足し算する場合は、足し算結果がNULLになることもあるので注意しましょう。
「NULL値がある場合には、足し算をしないで結果を返したくない」という場合は、次のように条件を設定するのがおすすめです。
- mysql> SELECT score + score02 FROM sample_table WHERE score IS NOT NULL AND score02 IS NOT NULL;
- +-----------------+
- | score + score02 |
- +-----------------+
- | 157 |
- | 204 |
- | 228 |
- | 308 |
- | 211 |
- +-----------------+
- 5 rows in set (0.04 sec)
上記のSQLを実行することで、NULL値を含んだデータは除いて取得できます。
覚えておくと便利でしょう。
NULL値を判定する関数については、以下の記事で詳しく解説しているので、参考にしてください!
【関連記事】
▶︎SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様


文字列を足し算するにはCONCAT関数を使う
SQLで文字列の足し算(連結)を行う場合は、CONCAT関数を使いましょう。
次のように記述します。
- SELECT CONCAT('文字列1', '文字列2', …);
例えば、次のような形で単語を複数連結可能です。
- mysql> SELECT CONCAT('potepan', 'style');
- +----------------------------+
- | CONCAT('potepan', 'style') |
- +----------------------------+
- | potepanstyle |
- +----------------------------+
- 1 row in set (0.02 sec)
テーブルのデータ同士を連結することもできます。
- mysql> SELECT * FROM sample_table2;
- +------+--------+--------+
- | id | word01 | word02 |
- +------+--------+--------+
- | 1 | apple | orange |
- | 2 | excel | word |
- | 3 | Tokyo | Osaka |
- +------+--------+--------+
- 3 rows in set (0.00 sec)
- mysql> SELECT CONCAT(word01, word02) FROM sample_table2;
- +------------------------+
- | CONCAT(word01, word02) |
- +------------------------+
- | appleorange |
- | excelword |
- | TokyoOsaka |
- +------------------------+
- 3 rows in set (0.01 sec)
文字列を足し算したい場合は、CONCAT関数を使いましょう。