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

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キーワードを付けることで対応できます。

  1. MySQLで列(カラム)を分割する方法!SUBSTRING_INDEX関数の使い方を徹底解説

    MySQLで列を分割するには?SUBSTRING_INDEX関数の基本MySQLで1つの列に格納された文字列を区切り文字で分割したい場合、SUBSTRING_INDEX()関数を使用します。この記事では、アンダースコア(_)で区切られた氏名データを分割する具体例を通じて、その使い方をわかりやすく解説します。1. サンプルテーブルの作成まず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable -> ( -> Name varchar(40) -> );Query OK, 0 rows affected (1.

  2. 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文を使って