MySQLで特定のレコードを除外し、残りのレコード(数値)の合計を求める方法
データベース操作では、特定の条件に該当するレコードを除外したうえで、残りのレコードの数値を合計したいケースがよくあります。MySQLでは WHERE 句と集計関数 SUM() を組み合わせることで、この処理を簡単に実現できます。
本記事では、サンプルテーブルを使いながら、「特定のレコード(ここでは名前が 'John' のレコード)を無視して、残りの Amount カラムの合計を取得する」手順を解説します。
1. サンプルテーブルを作成する
まずは、名前(Name)と金額(Amount)を格納するテーブルを作成します。
mysql> create table DemoTable
-> (
-> Name varchar(20),
-> Amount int
-> );
Query OK, 0 rows affected (0.61 sec)
Name は可変長文字列型の varchar(20)、Amount は整数型の int として定義しています。
2. テーブルにレコードを挿入する
次に、INSERT コマンドを使ってサンプルデータを登録します。
mysql> insert into DemoTable values('John',200);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris',150);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Mike',500);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('John',350);
Query OK, 1 row affected (0.18 sec)3. 登録されたレコードを確認する
SELECT 文ですべてのレコードを表示して、データが正しく挿入されているか確認しましょう。
mysql> select * from DemoTable;
実行結果は以下のとおりです。
+-------+--------+
| Name | Amount |
+-------+--------+
| John | 200 |
| Chris | 150 |
| Mike | 500 |
| John | 350 |
+-------+--------+
4 rows in set (0.00 sec)
4件のレコードが登録されており、そのうち2件が 'John' のデータであることがわかります。
4. 特定のレコードを除外して合計を求めるクエリ
ここからが本題です。特定のレコード('John')を無視し、残りのレコードの金額を合計するには、SUM() 関数と WHERE 句に不等号演算子(!=)を組み合わせます。
mysql> select sum(Amount) from DemoTable
-> where Name!='John';
実行結果は以下のとおりです。
+-------------+
| sum(Amount) |
+-------------+
| 650 |
+-------------+
1 row in set (0.00 sec)
5. 結果の解説
'John' のレコード2件(200 と 350)が除外され、残りの 'Chris'(150)と 'Mike'(500)の金額のみが合計されています。
- Chris:150
- Mike:500
150 + 500 = 650 となり、期待どおりの結果が得られました。
補足:より安全な書き方
!= 演算子は NULL 値を含む列では意図しない結果になる場合があります。より標準的で安全な書き方としては、<> 演算子を使用することもできます。
mysql> select sum(Amount) from DemoTable
-> where Name <> 'John';
どちらの演算子も同じ意味ですが、SQL標準では <> が推奨されています。
まとめ
MySQLで特定のレコードを除外して合計値を求めるには、SUM() 集計関数と WHERE 句(!= または <>)を組み合わせるだけで実現できます。この手法は、売上集計や在庫管理など、特定のデータを除いた統計値が必要な場面で幅広く活用できます。
-
MySQLで文字列と数値が混在するVARCHARレコードを正しくソートする方法
はじめにVARCHAR型のカラムに「101J」や「100A」のような文字列と数値が混在したデータが格納されている場合、通常のORDER BY句では辞書順(文字コード順)にソートされるため、「103M」が「101J」より前に来るなど、意図しない順序になることがあります。このようなケースでは、ORDER BY句と「+0」による暗黙の型変換を組み合わせることで、数値部分を優先した自然な順序でソートできます。本記事では、その具体的な手順を実行例とともに解説します。1. テーブルを作成するまず、検証用のテーブルを作成します。mysql> create table DemoTable ->
-
MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846 ( PurchaseDat