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

MySQLで小数点(ドット)を含む値を数値として正しく並べ替える方法

はじめに

MySQLでVARCHAR型のカラムに保存された「10.5」や「20.5」のような小数点(ドット)を含む数値データを、そのままORDER BYで並べ替えると、文字列として比較されるため意図した順序になりません。この記事では、CAST関数を使って数値として正しくソートする方法を、実際のSQL実行例とともに解説します。

サンプルテーブルの作成

まず、テーブルを作成しましょう。

mysql> create table DemoTable
-> (
-> Value varchar(20)
-> );
Query OK, 0 rows affected (0.53 sec)

レコードの挿入

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

mysql> insert into DemoTable values('20');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('10.5');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('11');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('10');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('20.5');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみます。

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
| 20 |
| 10.5 |
| 11 |
| 10 |
| 20.5 |
+-------+
5 rows in set (0.00 sec)

CAST関数で数値として並べ替える

小数点を含む値を正しく並べ替えるには、CAST関数で値をDECIMAL型に変換してからORDER BY句を使用します。

mysql> select *from DemoTable
-> order by CAST(Value AS DECIMAL) ASC;

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

+-------+
| Value |
+-------+
| 10 |
| 10.5 |
| 11 |
| 20 |
| 20.5 |
+-------+
5 rows in set (0.00 sec)

解説:なぜCASTが必要なのか

VARCHAR型のカラムをそのまま並べ替えると、MySQLは辞書順(文字列比較)でソートを行います。このため、桁数の異なる値が混在した場合に「10」「11」「20」「10.5」「20.5」のような、人間が期待する数値順とは異なる結果になることがあります。

CAST(Value AS DECIMAL)と指定することで、各値がクエリ実行時に一時的に数値として評価され、数値の大小に基づいた正しい昇順ソートが実現します。降順にしたい場合は、ASCをDESCに変更してください。

まとめ

VARCHAR型のカラムに保存された小数点を含む数値データを並べ替える場合は、ORDER BY CAST(カラム名 AS DECIMAL)を使うことで数値として正確にソートできます。なお、数値としての検索や並べ替えを頻繁に行うカラムであれば、パフォーマンス面でも有利なため、テーブル設計の時点でDECIMAL型やFLOAT型として定義しておくことをおすすめします。

  1. MySQLで数字を含む文字列を自然な順序で並べ替える方法

    MySQLで数字を含む文字列を自然な順序で並べ替える方法MySQLで「2J John has 9」や「2J John has 58」のように数字が混ざった文字列を並べ替えたい場合、単純なORDER BYでは文字列単位で比較されるため、意図したとおりの順序にならないことがあります。このようなときは、REGEXP_REPLACE関数やLENGTH関数をORDER BY句と組み合わせることで、人間にとって自然な順序(自然順ソート)を実現できます。ここでは、実際にテーブルを作成して手順を確認していきましょう。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql

  2. ApacheとMySQLを連携させる方法|ユーザー認証とログ管理の基本

    ApacheとMySQLの連携とは本記事では、Webサーバー「Apache」とデータベース「MySQL」を組み合わせて活用する方法を解説します。Apacheは、Apache Software Foundationによって開発・保守されているWebサーバーソフトウェアです。ユーザーからWebページへのアクセス要求(リクエスト)を受け付け、いくつかのセキュリティチェックを実施したうえで、目的のページへとユーザーを誘導します。MySQLによるユーザー認証MySQLデータベースを使ってユーザー認証を行えるプログラムは数多く存在します。これらのプログラムを利用すれば、アクセスログをMySQLのテーブルに