【MySQL】SUM関数で合計値を計算し、テーブルを更新して最後の列に結果を表示する方法
はじめに
SUM()関数で計算した合計値を変数に格納し、UPDATE文を使ってテーブルを更新する方法を解説します。まずはサンプルとなるテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int
);
Query OK, 0 rows affected (0.61 sec)
テストデータの挿入
INSERT文を使って、テーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable(Value) values(70); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(Value) values(100); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(150); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(250); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Value) values(60); Query OK, 1 row affected (0.22 sec)
レコードの確認
SELECT文でテーブル内のすべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行すると、次のような出力が得られます。
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 60 | +----+-------+ 5 rows in set (0.00 sec)
合計値を変数に格納してテーブルを更新する
以下のクエリでは、まずSELECT SUM()の結果をユーザー定義変数「@Total」に格納し、その値を使ってUPDATE文でId=5(最後の行)のValue列を更新しています。
mysql> set @Total=(select sum(Value) from DemoTable);
Query OK, 0 rows affected (0.00 sec)
mysql> update DemoTable
set Value= @Total
where Id=5;
Query OK, 1 row affected (0.16 sec)
Rows matched: 1 Changed: 1 Warnings: 0
更新結果の確認
もう一度テーブルのレコードを確認してみましょう。
mysql> select *from DemoTable;
実行すると、次のような出力が得られます。
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 630 | +----+-------+ 5 rows in set (0.00 sec)
まとめ
このように、SELECT SUM()で取得した合計値をユーザー定義変数に保存すれば、UPDATE文を使って自由にテーブルへ書き戻すことができます。上記の例では、70 + 100 + 150 + 250 + 60 の合計である「630」がId=5の行に設定されました。集計結果をテーブル内に保持したい場合に便利なテクニックなので、ぜひ活用してみてください。
-
MySQLでSUM関数とFORMAT関数を組み合わせて集計結果をフォーマットする方法
MySQLでは、SUM()関数とFORMAT()関数を組み合わせることで、数値カラムの合計値を計算しつつ、結果を見やすい形式(桁区切りのカンマ付き・小数点以下の桁数指定)で表示できます。この記事では、実際にテーブルを作成し、データを挿入してから、SUM と FORMAT を組み合わせたクエリの実行方法を順を追って解説します。 1. テーブルの作成 まず、CREATE TABLE 文を使ってサンプル用のテーブルを作成します。ここでは、金額を格納する Amount カラム(FLOAT 型)を1つだけ持つシンプルなテーブルを用意しました。 mysql> create table DemoTa
-
MySQLでテーブルを更新し、新しい列に名前のイニシャルを表示する方法
MySQLでは、LEFT()関数とSUBSTRING_INDEX()関数を組み合わせることで、氏名からイニシャル(頭文字)だけを取り出すことができます。この記事では、実際にテーブルを作成し、既存のデータからイニシャルを生成して新しい列に格納する手順を解説します。 1. テーブルの作成 まず、氏名を保存する「full_name」列と、イニシャルを格納する「short_name」列を持つテーブルを作成しましょう。 mysql> create table demo13 -> ( -> full_name varchar(100), -> short_name varchar