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

MySQLでテーブルを2つの列を使って並べ替える方法(ORDER BY句の使い方)

MySQLテーブルを2列で並べ替える基本構文

MySQLでは、ORDER BY句に複数の列をカンマ区切りで指定することで、2つ以上の列を基準にテーブルを並べ替えることができます。基本的な構文は以下の通りです。

ORDER BY 列名1 DESC, 列名2 DESC;

このように記述すると、まず「列名1」で並べ替えが行われ、同じ値が存在する場合にのみ「列名2」が優先順位として使われます。昇順にしたい場合は ASC を指定します(省略した場合もデフォルトは昇順です)。

サンプルテーブルの作成

まず、例として使用するテーブルを作成します。

mysql> CREATE TABLE OrderByDemo (
    ->   StudentId INT,
    ->   StudentName VARCHAR(100),
    ->   StudentAge INT
    -> );
Query OK, 0 rows affected (0.57 sec)

データの挿入

INSERTコマンドを使ってレコードを挿入します。

mysql> INSERT INTO OrderByDemo VALUES(1,'John',23);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO OrderByDemo VALUES(3,'Johnson',24);
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO OrderByDemo VALUES(4,'Carol',26);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO OrderByDemo VALUES(2,'David',20);
Query OK, 1 row affected (0.13 sec)

昇順(ASC)で2列を並べ替える

それでは、上記の構文を実際に適用して、2つの列を基準に並べ替えてみましょう。以下のクエリでは、StudentIdStudentAgeの両方を昇順でソートしています。

mysql> SELECT * FROM OrderByDemo ORDER BY StudentId ASC, StudentAge ASC;

実行結果は次の通りです。両方の列が昇順に並んでいることが確認できます。

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         1 | John        |         23 |
|         2 | David       |         20 |
|         3 | Johnson     |         24 |
|         4 | Carol       |         26 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

降順(DESC)で2列を並べ替える

DESCキーワードを使用すれば、降順での並べ替えも可能です。

mysql> SELECT * FROM OrderByDemo ORDER BY StudentId DESC, StudentAge DESC;

実行結果は以下のようになります。

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         4 | Carol       |         26 |
|         3 | Johnson     |         24 |
|         2 | David       |         20 |
|         1 | John        |         23 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)

ポイント:最初に指定した列が優先される

注意点として、ORDER BY句では最初に指定した列が最優先のソートキーになります。2番目以降の列は、1番目の列の値が重複しているレコードに対してのみ適用されます。たとえば「年齢順に並べ、同齢の場合は名前順にする」といったケースでは、ORDER BY StudentAge ASC, StudentName ASCのように記述します。

また、各列ごとに昇順・降順を個別に指定できるため、ORDER BY StudentAge DESC, StudentName ASCのような組み合わせも自由に設定可能です。複数列のソートを活用することで、より柔軟なデータ取得が実現できます。

  1. MySQLでカラム(列)の順序を変更する方法|ALTER TABLEとAFTERの使い方

    はい、MySQLではカラム(列)の順序を変更することが可能です。ALTER TABLE文とAFTERキーワードを組み合わせることで、特定のカラムを好きな位置へ移動させられます。 1. サンプルテーブルを作成する まず、動作確認用として以下のようなテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> `Student_Key_Age` int, -> `Student_Key_Name` varchar(20), -> `Student_Key_CountryName` varchar

  2. MySQLでfloat値を2つの列に分割する方法(SUBSTRING_INDEXとCASTを活用)

    MySQLでは、float型の値を2つの列に分割することが可能です。1つ目の列には小数点より前の整数部分を、2つ目の列には小数点より後の小数部分を格納します。この処理を実現するには、SUBSTRING_INDEX() 関数と CAST() 関数を組み合わせて使用します。この記事では、実際のサンプルコードを通じて、float値を整数部分と小数部分に分割する手順をわかりやすく解説します。1. サンプルテーブルの作成まず、テーブルを作成します。ここでは、float値を文字列として格納する Value1 列を持つテーブルを用意します。mysql> create table DemoTable19