Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのorder byで複数カラム指定する方法についてまとめています。

order byで複数条件を指定するにはカラムを列挙する

以下のSQLは、employees(社員)テーブルの全カラムを、emp_no(社員番号)降順、first_name(名)昇順、hire_date(雇用日)昇順で10件取得するSQLです。

SELECT * FROM `employees` 
ORDER BY emp_no DESC, first_name, hire_date ASC limit 10;

+--------+------------+------------+--------------+--------+------------+
| emp_no | birth_date | first_name | last_name    | gender | hire_date  |
+--------+------------+------------+--------------+--------+------------+
| 500000 | 1970-01-04 | TARO       | Yamada       | M      | 2001-04-07 |
| 499999 | 1958-05-01 | Sachin     | Tsukuda      | M      | 1997-11-30 |
| 499998 | 1956-09-05 | Patricia   | Breugel      | M      | 1993-10-13 |
| 499997 | 1961-08-03 | Berhard    | Lenart       | M      | 1986-04-21 |
| 499996 | 1953-03-07 | Zito       | Baaz         | M      | 1990-09-27 |
| 499995 | 1958-09-24 | Dekang     | Lichtner     | F      | 1993-01-12 |
| 499994 | 1952-02-26 | Navin      | Argence      | F      | 1990-04-24 |
| 499993 | 1963-06-04 | DeForest   | Mullainathan | M      | 1997-04-07 |
| 499992 | 1960-10-12 | Siamak     | Salverda     | F      | 1987-05-10 |
| 499991 | 1962-02-26 | Pohua      | Sichman      | F      | 1989-01-12 |
+--------+------------+------------+--------------+--------+------------+
10 rows in set (0.17 sec)

order byの後ろにソートしたいカラムを並べて記述すれば良いんですね。カラム毎に昇順(ASC)と降順(DESC)をそれぞれ指定できます。

【関連記事】
SQL order byでソート指定するサンプルコード集 指定のレコードだけ先頭に並べるには? 

複数のselect文でorder byを指定するサンプルコード

複雑な条件で抽出したレコードをorder byでソートするには、サブクエリ内でunion allして統合してからorder byでソート指定します。

以下のSQLは、誕生日が1970年1月1日以降の女性と誕生日が1960年1月1日以前の男性のレコードを取得し、姓名の姓(last_name)と、社員番号(emp_no)でソートする例です。

select * from 
(select emp_no, first_name, last_name, hire_date from employees where birth_date > 1970-01-01 and gender = 'F'
union all
select emp_no, first_name, last_name, hire_date from employees where birth_date < 1960-01-01 and gender = 'M'
) t1
order by last_name, emp_no
limit 100;

+--------+------------+-----------+------------+
| emp_no | first_name | last_name | hire_date  |
+--------+------------+-----------+------------+
|  12516 | Sreenivas  | Aamodt    | 1990-03-06 |
|  12982 | Sachem     | Aamodt    | 1992-01-11 |
|  17400 | Basim      | Aamodt    | 1991-09-15 |
|  18182 | Dekang     | Aamodt    | 1988-05-25 |
|  27188 | Vasilii    | Aamodt    | 1996-10-12 |
|  27413 | Phuoc      | Aamodt    | 1987-08-28 |
|  28387 | Nahla      | Aamodt    | 1997-02-15 |
|  29182 | Arumugam   | Aamodt    | 1986-01-09 |
|  31701 | Carrsten   | Aamodt    | 1985-10-07 |
|  35101 | Christ     | Aamodt    | 1990-02-05 |
|  36585 | Menkae     | Aamodt    | 1986-02-07 |
|  40184 | Zvonko     | Aamodt    | 1991-04-29 |
|  42199 | Mats       | Aamodt    | 1989-10-03 |
|  42706 | Khalid     | Aamodt    | 1993-07-31 |
|  46884 | Marla      | Aamodt    | 1989-07-18 |
|  50775 | Shai       | Aamodt    | 1991-10-25 |
|  51897 | Rajmohan   | Aamodt    | 1986-05-22 |
|  52791 | Khatoun    | Aamodt    | 1994-08-26 |
|  55985 | Ung        | Aamodt    | 1990-07-15 |
|  56183 | Takahiro   | Aamodt    | 1995-09-06 |
 :
 :

まとめ

ポテパンダの一言メモ
  • 複数の並べ替え条件を指定するには、order byの後に複数のカラムを記述する
  • カラムごとにdesc、ascの並び順指定が可能
  • 複数のselect文の結果をorder byするにはunian allとサブクエリを組み合わせる

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。