【MySQL】テーブルに新しい列を追加し、同じテーブルの他の2つの列から値を計算して入力する方法
MySQLで新しい列を追加し、既存の2つの列から計算した値を入力する方法
この記事では、MySQLのテーブルに新しい列を追加し、同じテーブル内の他の2つの列のデータをもとに値を入力する方法を、実際の例を交えて解説します。
1. テーブルを作成する
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Price int,
Quantity int
);
Query OK, 0 rows affected (0.71 sec)
2. レコードを挿入する
INSERTコマンドを使用して、テーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable values(45,3); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(90,2); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(440,1); Query OK, 1 row affected (0.09 sec)
3. データを確認する
SELECT文を使用して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような出力が得られます。
+-------+----------+ | Price | Quantity | +-------+----------+ | 45 | 3 | | 90 | 2 | | 440 | 1 | +-------+----------+ 3 rows in set (0.00 sec)
4. 新しい列を追加して2つの列の値から計算する
それが本題となる、テーブルに新しい列を追加し、他の2つの列のデータをもとに値を入力するクエリです。SELECT文の中で計算式を記述し、AS句で別名を付けることで実現できます。ここでは、新しい列「TotalAmount」を追加し、「Price」と「Quantity」の掛け算の結果をその値としています。
mysql> select Price,Quantity, Price*Quantity AS TotalAmount from DemoTable;
実行すると、以下のような出力が得られます。
+-------+----------+-------------+ | Price | Quantity | TotalAmount | +-------+----------+-------------+ | 45 | 3 | 135 | | 90 | 2 | 180 | | 440 | 1 | 440 | +-------+----------+-------------+ 3 rows in set (0.00 sec)
このように、SELECT文で計算式とAS句を組み合わせることで、既存の列から導き出された値を持つ新しい列を簡単に表示できます。なお、テーブル構造そのものに永続的に列を追加したい場合は、ALTER TABLE文で列を追加した後、UPDATE文を使って値を設定する方法もあります。用途に応じて使い分けるとよいでしょう。
-
MySQLで条件に応じて同じ列の2つの値を連結する方法
MySQLで条件に応じて同じ列の2つの値を連結する方法 MySQLでは、max() などの集計関数と CASE 式を組み合わせることで、条件の異なる同じ列の値を1つの文字列として連結できます。この記事では、サンプルテーブルを作成しながら、具体的な手順をわかりやすく解説します。 1. サンプルテーブルの作成 まず、create table コマンドでテーブルを作成しましょう。 mysql> create table DemoTable1869 ( Id int, &nb
-
MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方
MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (