MySQLクエリでレコードの小数点を削除して合計を求める方法
文字列型(varchar)のカラムに保存された数値データから小数点を取り除き、その合計を求めたい場合があります。そんなときは、集計関数SUM()と文字列操作関数REPLACE()を組み合わせることで実現できます。この記事では、テーブル作成から合計の算出まで、具体的な手順をサンプルコード付きで解説します。
サンプルテーブルを作成する
まず、価格データを保存するためのテーブルを作成します。ここではPriceカラムをvarchar型として定義します。
mysql> create table DemoTable857(Price varchar(100));
Query OK, 0 rows affected (1.40 sec)
レコードを挿入する
次に、INSERTコマンドを使ってテーブルにレコードを追加します。あえて「40.30.20」のように小数点が複数含まれる不正な形式のデータも挿入しています。
mysql> insert into DemoTable857 values('50.60');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable857 values('40.30.20');
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable857 values('10.20');
Query OK, 1 row affected (0.69 sec)
テーブルの内容を確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable857;
実行結果は以下の通りです。
+----------+
| Price |
+----------+
| 50.60 |
| 40.30.20 |
| 10.20 |
+----------+
3 rows in set (0.00 sec)
小数点を削除して合計を求めるクエリ
以下のクエリを実行すると、各レコードから小数点を削除した上で合計値を算出できます。
mysql> select sum(replace(Price,'.','')) AS SumOfAll from DemoTable857;
実行結果:
+----------+
| SumOfAll |
+----------+
| 409100 |
+----------+
1 row in set (0.03 sec)
仕組みの解説
REPLACE(Price, '.', '')は、Priceカラムの値に含まれるすべてのピリオド(.)を空文字に置換します。例えば「50.60」は「5060」、「40.30.20」は「403020」に変換されます。
その後、SUM()関数によってこれらの文字列は暗黙的に数値へ変換され、合計が計算されます。今回の例では「5060 + 403020 + 1020 = 409100」という結果になります。
このように、REPLACE()とSUM()を組み合わせれば、小数点を含む文字列データでも簡単に数値として合計を求めることが可能です。入力ミスなどで形式が不揃いなデータを一括集計したい場合にぜひ活用してください。
-
MySQLで月の範囲を指定してレコードを取得する方法
MySQLでは、YEAR()関数とMONTH()関数、さらにBETWEEN演算子を組み合わせることで、特定の月の範囲に該当するレコードを簡単に抽出できます。ここでは、前年の7月〜12月と当年の1月〜7月というように、年をまたいだ月の範囲でデータを取得する方法を解説します。 サンプルテーブルの作成 まず、テーブルを作成します。 mysql> create table DemoTable1795 ( Name varchar(20), DueDate date
-
MySQLで複数のキーワードに一致するレコードを抽出する方法|RLIKE演算子の使い方を解説
RLIKE演算子を使った複数条件でのレコード絞り込み MySQLで複数の単語(キーワード)のいずれかに一致するレコードを抽出したい場合は、RLIKE演算子を使用します。RLIKEは正規表現によるパターンマッチングを行う演算子で、|(パイプ)で区切ることで、OR条件のように複数の値を指定できます。 基本的な構文は以下のとおりです。 SELECT * FROM yourTableName WHERE yourColumnName RLIKE yourValue1|yourValue2; サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> CREATE