MySQLでNULLが並ぶテーブル列に小計(累計)を追加する方法
はじめに
MySQLでは、ユーザー定義変数を活用することで、NULLが並んでいる列に対して小計(累積値)を簡単に追加できます。この記事では、実際のサンプルコードを使いながら、その手順をわかりやすく解説します。
1. テーブルの作成
まず、以下のようにテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Amount int,
-> SubTotal int
-> );
Query OK, 0 rows affected (0.65 sec)
2. レコードの挿入
次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここではAmount列のみに値を設定し、SubTotal列はあえてNULLのままにしておきます。
mysql> insert into DemoTable(Amount) values(50);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(Amount) values(60);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(Amount) values(70);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Amount) values(80);
Query OK, 1 row affected (0.17 sec)
3. レコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
実行すると、次のような出力が得られます。SubTotal列にはまだ値が設定されていないため、NULLが表示されています。
+--------+----------+
| Amount | SubTotal |
+--------+----------+
| 50 | NULL |
| 60 | NULL |
| 70 | NULL |
| 80 | NULL |
+--------+----------+
4 rows in set (0.00 sec)
小計(累計)を追加するクエリ
ここからが本題です。MySQLで列に小計を追加するには、ユーザー定義変数「@sum」を使用します。まず変数を0で初期化し、その後UPDATE文で各行のAmount値を順番に加算していきます。
mysql> set @sum := 0;
Query OK, 0 rows affected (0.10 sec)
mysql> update DemoTable set SubTotal = (@sum := @sum + Amount);
Query OK, 4 rows affected (0.19 sec)
Rows matched: 4 Changed: 4 Warnings: 0
ポイントは「(@sum := @sum + Amount)」という式です。変数@sumに行ごとのAmount値を加算しながら代入していくことで、累積値(ランニングトータル)を求めることができます。
4. 更新後の確認
もう一度テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable;
出力結果
実行すると、次のようにSubTotal列に小計(累積値)が正しく格納されていることがわかります。
+--------+----------+
| Amount | SubTotal |
+--------+----------+
| 50 | 50 |
| 60 | 110 |
| 70 | 180 |
| 80 | 260 |
+--------+----------+
4 rows in set (0.00 sec)
まとめ
このように、ユーザー定義変数とUPDATE文を組み合わせることで、NULLだらけの列にも小計を簡単に追加できます。出力結果を見ると、50 → 110 → 180 → 260 と、各行までの合計値が順に計算されていることが確認できます。なお、MySQL 8.0以降の環境では、ウィンドウ関数「SUM() OVER()」を使った方法が推奨されているので、新しいバージョンをお使いの場合はそちらも検討するとよいでしょう。
-
既存のMySQLカラムにNOT NULL制約を追加する方法を解説
ALTER TABLE文を使ってNOT NULL制約を追加する すでに作成済みのテーブルのカラムにNOT NULL制約を追加したい場合は、ALTER TABLE文とMODIFY句を組み合わせることで簡単に実現できます。ここでは、実際の手順を順番に見ていきましょう。 手順1:サンプルテーブルを作成する まず、検証用のテーブル「DemoTable」を作成します。この時点では、StudentNameカラムにはNOT NULL制約を設定していません。 mysql> create table DemoTable -> ( &nbs
-
PythonでMySQLのテーブルに新しい列(カラム)を追加する方法
既存のテーブルに後から新しい列を追加したい場面は少なくありません。例えば、「Students(学生)」というテーブルに「Name(名前)」「Age(年齢)」「Roll no(出席番号)」といった列があるとします。ここに、新しく「Address(住所)」という列を追加したい場合、どうすればよいのでしょうか。このようなときに活躍するのがALTERコマンドです。ALTERコマンドは、データベース内の列を変更・削除・更新するためのコマンドで、ADD句と組み合わせることで、テーブルに新しい列を追加することもできます。構文ALTER TABLE table_name ADD new_column_name