準備
以下のテーブルで確認する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT * FROM test_order; +------+------+ | num1 | num2 | +------+------+ | 1 | 10 | | 1 | 20 | | 1 | 30 | | 2 | 10 | | 2 | 20 | | 2 | 30 | | 3 | 10 | | 3 | 20 | | 3 | 30 | +------+------+ 9 rows in set (0.00 sec) |
指定方法
ORDER BY
で指定したカラムをキーにして並べ替える。デフォルトは昇順でASC
を指定したのと同じ。
SELECT カラム群 FROM テーブル ORDER BY カラム [ASC/DESC];
以下の例では、2つ目のnum2
で昇順にソートしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT * FROM test_order ORDER BY num2; +------+------+ | num1 | num2 | +------+------+ | 1 | 10 | | 2 | 10 | | 3 | 10 | | 1 | 20 | | 2 | 20 | | 3 | 20 | | 1 | 30 | | 2 | 30 | | 3 | 30 | +------+------+ 9 rows in set (0.00 sec) |
降順でソートする場合はDESC
を指定。以下はnum2
カラムの内容で降順にソートしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT * FROM test_order ORDER BY num2 DESC; +------+------+ | num1 | num2 | +------+------+ | 1 | 30 | | 2 | 30 | | 3 | 30 | | 1 | 20 | | 2 | 20 | | 3 | 20 | | 1 | 10 | | 2 | 10 | | 3 | 10 | +------+------+ 9 rows in set (0.00 sec) |
複数カラムでのソート
ORDER BY
で複数カラムを指定すると、指定したカラムの順でネストの外側のようにしてソートする。
以下の例では、num1
で降順ソートし、その中でnum2
で降順ソートしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT * FROM test_order ORDER BY num1 DESC, num2 DESC; +------+------+ | num1 | num2 | +------+------+ | 3 | 30 | | 3 | 20 | | 3 | 10 | | 2 | 30 | | 2 | 20 | | 2 | 10 | | 1 | 30 | | 1 | 20 | | 1 | 10 | +------+------+ 9 rows in set (0.00 sec) |
順番を入れ替えた例。まずnum2
で降順ソートしてから、その中でnum1
でソートしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT * FROM test_order ORDER BY num2 DESC, num1 DESC; +------+------+ | num1 | num2 | +------+------+ | 3 | 30 | | 2 | 30 | | 1 | 30 | | 3 | 20 | | 2 | 20 | | 1 | 20 | | 3 | 10 | | 2 | 10 | | 1 | 10 | +------+------+ 9 rows in set (0.00 sec) |