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

MySQLで一連の数値の最初の数値を基準に並べ替えるクエリの書き方

概要

カンマ区切りで格納された一連の数値(例:「245,654,76,89,98」)を、その中の最初の数値を基準にして並べ替えたい場合は、ORDER BY句とSUBSTRING_INDEX()関数、さらにCAST()関数を組み合わせることで実現できます。
まずはサンプル用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    SetOfNumbers text
);
Query OK, 0 rows affected (0.53 sec)

続いて、insertコマンドでいくつかレコードを挿入します。

mysql> insert into DemoTable values('245,654,76,89,98');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2000,567,9090,6789');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('1001,90595,657,99');
Query OK, 1 row affected (0.20 sec)

select文でテーブル内のすべてのレコードを確認してみましょう。

mysql> select *from DemoTable;

このコードを実行すると、次のような出力が得られます。

+--------------------+
| SetOfNumbers       |
+--------------------+
| 245,654,76,89,98   |
| 2000,567,9090,6789 |
| 1001,90595,657,99  |
+--------------------+
3 rows in set (0.00 sec)

最初の数値で並べ替えるクエリ

一連の数値のうち、先頭の数値を基準にレコードを並べ替えるには、次のようなクエリを使用します。

mysql> select *from DemoTable order by cast(substring_index(SetOfNumbers,',',1) as unsigned);

実行すると、以下のように出力されます。

+--------------------+
| SetOfNumbers       |
+--------------------+
| 245,654,76,89,98   |
| 1001,90595,657,99  |
| 2000,567,9090,6789 |
+--------------------+
3 rows in set (0.00 sec)

仕組みの解説

このクエリでは、SUBSTRING_INDEX(SetOfNumbers, ',', 1)によって、カンマ区切りの文字列から最初の要素(先頭の数値)だけを取り出しています。その後、CAST(... AS UNSIGNED)で取り出した文字列を符号なし整数に変換しています。
文字列のまま並べ替えると「2000」が「245」より前に来るといった辞書順(文字コード順)のソートになってしまうため、数値型へキャストすることで正しい数値順の並べ替えが可能になります。

  1. MySQLクエリ:剰余(モジュロ)演算の結果に基づいてレコードをORDER BYで並べ替える方法

    剰余演算の結果を使ったレコードの並べ替えとはMySQLでは、ORDER BY句と剰余演算子(%)を組み合わせることで、カラムの値を割り算した余りの結果に基づいてレコードを並べ替えることができます。例えば、IDが偶数か奇数か、あるいは3で割った余りなどの条件をソートキーとして活用したい場合に非常に便利です。ここでは、実際にサンプルテーブルを作成し、剰余演算による並べ替えを確認していきましょう。1. サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> create table DemoTable(   Stud

  2. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す