MySQLで数値列を昇順(ASC)に並べ替えるクエリの書き方:CAST()関数の活用
MySQLで数値データを正しく昇順(ASC)に並べ替えたい場合、CAST()関数を活用すると便利です。文字列として保存された数値でも、CAST()関数で整数型に変換してからソートすれば、期待通りの順序で表示できます。
ここでは、実際にテーブルを作成し、データを挿入して、CAST()関数による昇順ソートの手順を具体的に見ていきましょう。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Score int
);
Query OK, 0 rows affected (0.72 sec)
レコードの挿入
次に、INSERTコマンドを使っていくつかのレコードを追加します。
mysql> insert into DemoTable(Score) values(10);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(Score) values(100);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Score) values(11);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Score) values(97);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Score) values(78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(Score) values(89);
Query OK, 1 row affected (0.18 sec)
登録済みレコードの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+----+-------+
| Id | Score |
+----+-------+
| 1 | 10 |
| 2 | 100 |
| 3 | 11 |
| 4 | 97 |
| 5 | 78 |
| 6 | 89 |
+----+-------+
6 rows in set (0.00 sec)
CAST()関数で数値列を昇順に並べ替える
数値列を昇順(ASC)にソートするためのクエリがこちらです。CAST()関数でScore列をSIGNED INTEGER型に変換してから、ORDER BY句で並べ替えています。
mysql> select *from DemoTable order by cast(Score AS SIGNED INTEGER) ASC;
このクエリを実行すると、次のような出力が得られます。
+----+-------+
| Id | Score |
+----+-------+
| 1 | 10 |
| 3 | 11 |
| 5 | 78 |
| 6 | 89 |
| 4 | 97 |
| 2 | 100 |
+----+-------+
6 rows in set (0.00 sec)
まとめ
出力結果を見ると、Score列が「10 → 11 → 78 → 89 → 97 → 100」の順に正しく昇順で並んでいることがわかります。特に、Score列がVARCHAR型などの文字列型で保存されている場合、そのままORDER BYを使うと辞書順でソートされ、「10, 100, 11…」のような意図しない順序になってしまうことがあります。そんなときもCAST()関数で数値型に変換すれば、正確な数値順のソートが可能になります。
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す
-
MySQLのORDER BY ASCでNULL値を最下部に表示する方法
MySQLのORDER BY ASCでNULL値を最下部に表示する方法MySQLでは、ORDER BY句を昇順(ASC)で使用した場合、デフォルトではNULLが先頭(上部)に表示されます。しかし実務では、「NULLは一番下に表示したい」というケースがよくあります。このような場合には、CASE式とORDER BYを組み合わせることで簡単に実現できます。この記事では、NULLや空文字列()を含むデータを昇順ソートしつつ、NULLを最下部に表示する方法を、具体的なサンプルコードとともに解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table D