【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],   ・・・

今、ITエンジニアは前例のない売り手市場です

ITエンジニアは前例のない売り手市場、転職なら今

現在のエンジニアの求人数と求人倍率をご存知ですか?

直近(※)のIT業界全体の求人倍率は7.85倍です。

つまり 企業が8回 IT人材の求人を出しても、 1人しかエントリーがない 状況です。

エンジニア側が企業を選ぶ なら、今がチャンスです。

※転職サイトdodaが毎月発表している転職求人倍率。
 2019年12月9日発表/集計対象期間は2019年11月1日〜30日

詳しくはこちら


人気記事【今年の抱負】退職しオープン&フリー&シンプルに生きていく【失敗しない働き方改革の本質】