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関数を使いましょう。