MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 句(!= または <>)を組み合わせるだけで実現できます。この手法は、売上集計や在庫管理など、特定のデータを除いた統計値が必要な場面で幅広く活用できます。

  1. MySQLで文字列と数値が混在するVARCHARレコードを正しくソートする方法

    はじめにVARCHAR型のカラムに「101J」や「100A」のような文字列と数値が混在したデータが格納されている場合、通常のORDER BY句では辞書順(文字コード順)にソートされるため、「103M」が「101J」より前に来るなど、意図しない順序になることがあります。このようなケースでは、ORDER BY句と「+0」による暗黙の型変換を組み合わせることで、数値部分を優先した自然な順序でソートできます。本記事では、その具体的な手順を実行例とともに解説します。1. テーブルを作成するまず、検証用のテーブルを作成します。mysql> create table DemoTable ->

  2. MySQLで特定の月と年に基づいてレコードを取得する方法

    MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846     (     PurchaseDat