MySQLで列の値から浮動小数点数のみを抽出する方法
この記事では、MySQLのテーブルに格納された列の値の中から、整数ではなく浮動小数点数(小数部分を持つ値)のみを抽出する方法を解説します。ポイントは FLOOR() 関数との比較です。
サンプルテーブルの作成
まず、DECIMAL 型のカラムを持つテーブルを作成します。
mysql> create table DemoTable628 (Value DECIMAL(10,2)); Query OK, 0 rows affected (0.52 sec)
レコードの挿入
次に、INSERT コマンドを使っていくつかのレコードを挿入します。意図的に「12.00」という整数値も含めておきます。
mysql> insert into DemoTable628 values(10.97); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable628 values(20.04); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable628 values(12.00); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable628 values(89.56); Query OK, 1 row affected (0.20 sec)
テーブル内の全レコードを確認
SELECT 文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable628;
実行結果は以下の通りです。
+-------+ | Value | +-------+ | 10.97 | | 20.04 | | 12.00 | | 89.56 | +-------+ 4 rows in set (0.00 sec)
浮動小数点数のみを取得するクエリ
列の値から浮動小数点数のみを取得するには、WHERE 句で「元の値」と「FLOOR() で切り捨てた値」を比較します。
mysql> select *from DemoTable628 where Value!=FLOOR(Value);
実行結果は以下の通りです。
+-------+ | Value | +-------+ | 10.97 | | 20.04 | | 89.56 | +-------+ 3 rows in set (0.00 sec)
仕組みの解説
FLOOR() 関数は、引数として渡された値以下の最大の整数を返します。たとえば FLOOR(10.97) は 10 を、FLOOR(12.00) は 12 を返します。
したがって、「Value != FLOOR(Value)」という条件は、元の値と切り捨て後の値が一致しないレコード、すなわち小数部分を持つ値だけを抽出することになります。上記の結果では、整数である 12.00 が除外され、10.97・20.04・89.56 の3件のみが表示されています。
別のアプローチ
同様の処理は、CEILING() や TRUNCATE() 関数を使っても実現できます。また、「MOD(Value, 1) != 0」のように1で割った余りを判定する方法でも、小数部分を持つレコードをフィルタリング可能です。用途や可読性に応じて使い分けるとよいでしょう。
-
MySQLで特定のセル(条件に一致する行)のみの合計値を取得する方法
MySQLで特定のセル、つまり条件に一致する行だけを対象に合計値を求めたい場合は、WHERE句で条件を指定し、集計関数のSUM()を使用します。ここでは、学生ごとの点数が登録されたテーブルを例に、特定の学生の点数合計を取得する手順を解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1370 -> ( -> StudentName varchar(20), -> Marks int -> ); Query OK, 0 rows affected (0.87 sec)
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(