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

SQLクエリでMySQLフィールドの保存価格から20%(消費税分)を除去する方法

価格データから税抜きの金額を求めたいケースはよくあります。ここでは、保存されている価格に20%の消費税が上乗せされて含まれている場合を想定し、SQLクエリを使ってその税相当分(20%)を取り除く方法を解説します。

まずはサンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Price int
);
Query OK, 0 rows affected (1.09 sec)

テストデータの挿入

INSERTコマンドを使って、いくつかのレコードをテーブルに追加します。

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values(80);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(60);
Query OK, 1 row affected (0.18 sec)

登録データの確認

SELECT文で、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-------+
| Price |
+-------+
|    20 |
|    40 |
|    80 |
|    60 |
+-------+
4 rows in set (0.00 sec)

20%の税分を除去するUPDATEクエリ

それでは、保存された価格から20%の税相当分を差し引くクエリを見ていきましょう。

ポイントとなるのは計算方法です。価格に20%の消費税が含まれているということは、税抜き価格に対して「1 + 0.20 = 1.2倍」した金額が保存されていることになります。つまり、税抜き価格を求めるには、保存されている価格を 120/100 = 1.2 で割ればよいのです。

mysql> update DemoTable set Price=Price/1.2;
Query OK, 4 rows affected (0.11 sec)
Rows matched: 4 Changed: 4 Warnings: 0

更新結果の確認

もう一度テーブルのレコードを確認してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-------+
| Price |
+-------+
|    17 |
|    33 |
|    67 |
|    50 |
+-------+
4 rows in set (0.00 sec)

このように、Priceカラムの値がすべて約16.7%(1/1.2)減少しました。例えば元の値が20だったレコードは17になっています。なお、PriceカラムはINT型のため小数点以下は切り捨てられています。より正確な税抜き価格が必要な場合は、DECIMAL型などの小数を扱えるデータ型を使用することをおすすめします。

  1. MySQLストアドプロシージャ内で現在のデータベース名を取得する方法

    MySQLで現在接続しているデータベース名を取得したい場合は、DATABASE() 関数を使用します。まず、基本的な構文を見てみましょう。基本構文select database();この関数は、現在選択されているデータベースの名前を文字列として返します。データベースが選択されていない場合は NULL を返します。ストアドプロシージャへの実装次に、上記の構文を実際にストアドプロシージャの中に組み込んでみましょう。以下の手順で作成できます。mysql> delimiter // mysql> create procedure get_procedure_database_name()

  2. MySQLストアドプロシージャ内で動的SQLクエリを実装する方法

    ストアドプロシージャ内で動的SQLクエリを実行するには、PREPARE STATEMENT(プリペアドステートメント)の仕組みを利用します。まずはサンプル用のテーブルを作成しましょう。1. テーブルの作成mysql> create table DemoTable2033 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Name varchar(20) -> ); Query OK, 0 rows affected (1.61 sec)2. レコードの挿入INSERTコマン