MySQLのORDER BY句で複数列を同時にソートする方法を徹底解説
MySQLで複数の列を一度にソートするには?
MySQLで複数の列を同時にソートしたい場合は、ORDER BY句を使用します。ORDER BY句に複数の列名をカンマで区切って指定すると、最初に指定した列でソートされ、同じ値が存在する場合は次の列の値でソートされます。
基本構文
select yourColumnName1,yourColumnName2,yourColumnName3 from yourTableName order by yourColumnName2,yourColumnName3;
それでは、実際にテーブルを作成して動作を確認してみましょう。
サンプルテーブルの作成
まず、以下のクエリでテーブルを作成します。
mysql> create table doubleSortDemo -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varchar(100), -> StudentCountryName varchar(10) -> ); Query OK, 0 rows affected (0.71 sec)
レコードの挿入
次に、INSERTコマンドを使用してテーブルにレコードを挿入します。
mysql> insert into doubleSortDemo(StudentName,StudentCountryName)
values('John','AUS');
Query OK, 1 row affected (0.21 sec)
mysql> insert into doubleSortDemo(StudentName,StudentCountryName) values('Sam','UK');
Query OK, 1 row affected (0.20 sec)
mysql> insert into doubleSortDemo(StudentName,StudentCountryName) values('Bob','US');
Query OK, 1 row affected (0.16 sec)
mysql> insert into doubleSortDemo(StudentName,StudentCountryName) values('Carol','UK');
Query OK, 1 row affected (0.32 sec)
mysql> insert into doubleSortDemo(StudentName,StudentCountryName)
values('David','AUS');
Query OK, 1 row affected (0.19 sec)
mysql> insert into doubleSortDemo(StudentName,StudentCountryName) values('Larry','UK');
Query OK, 1 row affected (0.15 sec)テーブルの全レコードを表示
SELECT文を使用して、テーブル内のすべてのレコードを表示してみます。
mysql> select * from doubleSortDemo;
実行結果は以下の通りです。
+-----------+-------------+--------------------+ | StudentId | StudentName | StudentCountryName | +-----------+-------------+--------------------+ | 1 | John | AUS | | 2 | Sam | UK | | 3 | Bob | US | | 4 | Carol | UK | | 5 | David | AUS | | 6 | Larry | UK | +-----------+-------------+--------------------+ 6 rows in set (0.00 sec)
複数列でのソートを実行する
ここで、学生の国名(StudentCountryName)と名前(StudentName)の2つの列を基準にソートを実行してみましょう。以下のクエリを使用します。
mysql> select StudentId,StudentName,StudentCountryName from doubleSortDemo -> order by StudentCountryName,StudentName;
実行結果は以下の通りです。
+-----------+-------------+--------------------+ | StudentId | StudentName | StudentCountryName | +-----------+-------------+--------------------+ | 5 | David | AUS | | 1 | John | AUS | | 4 | Carol | UK | | 6 | Larry | UK | | 2 | Sam | UK | | 3 | Bob | US | +-----------+-------------+--------------------+ 6 rows in set (0.00 sec)
実行結果のポイント
上記の出力結果を見ると、以下の順序でソートされていることがわかります。
まず国名(StudentCountryName)がアルファベット順(AUS → UK → US)にソートされ、同じ国名のレコード内では学生名(StudentName)がアルファベット順にソートされています。例えば、UKのレコードではCarol → Larry → Samの順に並んでいます。
このように、ORDER BY句に複数の列を指定することで、優先順位の高い列から順にソート処理が適用され、柔軟なデータの並べ替えが可能になります。なお、降順でソートしたい場合は、各列名の後にDESCキーワードを付けることで対応できます。
-
MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説
MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.
-
MySQLでDATETIME型の列に時間を追加する方法|ADDTIME()関数の使い方を解説
DATETIME型の値に時間を加算したい場合、MySQLではADDTIME()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、ADDTIME()関数で時間を追加する手順をわかりやすく解説します。1. テーブルを作成するまず、DATETIME型の列を持つテーブルを作成します。mysql> create table DemoTable1848 ( ShippingDate datetime ); Query OK, 0 rows affected (0.00 sec)2. サンプルデータを挿入する次に、INSERT文を使って