【SQL】order byで複数カラムを指定して並べ替えるには?

SQL

SQLのOrder byを調べる人

SQLを調べる人
「複数の条件を指定して、テーブルを並べ替えたいです。ORDER BY句をどのように指定すれば良いでしょう。」

こんな疑問に答えます。

結論から言うと、ORDER BYの後に順序をつけるカラムを優先順に指定するだけです。

[複数のORDER BYを指定する構文]

SELECT   [カラム]   from   [テーブル]   ORDER BY   [カラムA],   [カラムB],   ・・・

具体例を示します

以下では、リンゴとオレンジとバナナのデータを使った具体例で解説します。

事前準備

order by..句を使う準備

テスト用のテーブルを作成します。

CREATE TABLE test (id INTEGER NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,price INTEGER NOT NULL, PRIMARY KEY(id));

データは、果物とその価格を登録します。

INSERT INTO test (name,price) VALUES('Apple',150);
INSERT INTO test (name,price) VALUES('Apple',120);
INSERT INTO test (name,price) VALUES('Orange',120);
INSERT INTO test (name,price) VALUES('Orange',200);
INSERT INTO test (name,price) VALUES('Banana',150);
INSERT INTO test (name,price) VALUES('Banana',120);

準備完了。
このテーブルを使って解説します。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  1 | Apple  |   150 |
|  2 | Apple  |   120 |
|  3 | Orange |   120 |
|  4 | Orange |   200 |
|  5 | Banana |   150 |
|  6 | Banana |   120 |
+----+--------+-------+

ORDER BYで複数のカラムを指定して並べ替える

ORDER BYで複数のカラムを指定して並べ替える

[値段順]→[果物の種類順]で並べ替えます。

SELECT * FROM test ORDER BY price, name;

 並び替えた結果は以下の通りです。
価格が安い順かつ果物の名前のアルファベット順になっていますね。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  2 | Apple  |   120 |
|  6 | Banana |   120 |
|  3 | Orange |   120 |
|  1 | Apple  |   150 |
|  5 | Banana |   150 |
|  4 | Orange |   200 |
+----+--------+-------+

次に、[果物の種類順]→[値段順]で並べ替えます。

SELECT * FROM test ORDER BY name, price;

 並び替えた結果は以下の通りです。
果物の名前のアルファベット順かつ価格が安い順になっていますね。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  2 | Apple  |   120 |
|  1 | Apple  |   150 |
|  6 | Banana |   120 |
|  5 | Banana |   150 |
|  3 | Orange |   120 |
|  4 | Orange |   200 |
+----+--------+-------+

ORDER BYで複数のカラムを指定して並べ替える[逆順]

ORDER BYで複数のカラムを指定して並べ替える[逆順]

DESCを指定すれば、逆順に並び替えることが可能です。

[価格の高い順]→[名前順]に並べ替えます。

SELECT * FROM test ORDER BY price DESC, name;

 並び替えた結果は以下の通りです。
価格が高い順かつ果物の名前のアルファベット順になっていますね。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  4 | Orange |   200 |
|  1 | Apple  |   150 |
|  5 | Banana |   150 |
|  2 | Apple  |   120 |
|  6 | Banana |   120 |
|  3 | Orange |   120 |
+----+--------+-------+

[価格の高い順]→[名前の逆順]に並べ替えます。

SELECT * FROM test ORDER BY price DESC, name DESC;

 並び替えた結果は以下の通りです。
価格が高い順かつ果物の名前のアルファベットの逆順になっていますね。
[実行結果]

+----+--------+-------+
| id | name   | price |
+----+--------+-------+
|  4 | Orange |   200 |
|  5 | Banana |   150 |
|  1 | Apple  |   150 |
|  3 | Orange |   120 |
|  6 | Banana |   120 |
|  2 | Apple  |   120 |
+----+--------+-------+

今回は以上です。ORDER BYを複数指定する構文とその具体例を解説しました。

本記事の内容は、実際に手を動かしてSQLを実行してみることをオススメします。

コピペで簡単に実行できますのでぜひ試して下さい!

最後に構文をおさらい

[複数のORDER BYを指定する構文]

SELECT   [カラム]   from   [テーブル]   ORDER BY   [カラムA],   [カラムB],   ・・・

今回は以上です。