ORDER BY句
説明
ORDER BY 句は、ユーザーが指定した順序で結果行をソートして返します。SORT BY 句とは異なり、この句は出力の総順序を保証します。
構文
ORDER BY { expression [ sort_direction | nulls_sort_order ] [ , ... ] }
パラメータ
-
ORDER BY
行をソートするために使用される、オプションのパラメータ
sort_directionおよびnulls_sort_orderを伴う、カンマ区切りの式リストを指定します。 -
sort_direction
行を昇順または降順でソートするかどうかをオプションで指定します。ソート方向の有効な値は、昇順の場合は
ASC、降順の場合はDESCです。ソート方向が明示的に指定されていない場合、デフォルトでは行は昇順でソートされます。構文: [ ASC
|DESC ] -
nulls_sort_order
NULL 値が非NULL 値の前または後に返されるかをオプションで指定します。
null_sort_orderが指定されていない場合、ソート順序がASCの場合は NULL が最初にソートされ、ソート順序がDESCの場合は NULL が最後にソートされます。NULLS FIRSTが指定されている場合、ソート順序に関係なく NULL 値が最初に返されます。NULLS LASTが指定されている場合、ソート順序に関係なく NULL 値が最後に返されます。
構文:
[ NULLS { FIRST | LAST } ]
例
CREATE TABLE person (id INT, name STRING, age INT);
INSERT INTO person VALUES
(100, 'John', 30),
(200, 'Mary', NULL),
(300, 'Mike', 80),
(400, 'Jerry', NULL),
(500, 'Dan', 50);
-- Sort rows by age. By default rows are sorted in ascending manner with NULL FIRST.
SELECT name, age FROM person ORDER BY age;
+-----+----+
| name| age|
+-----+----+
|Jerry|null|
| Mary|null|
| John| 30|
| Dan| 50|
| Mike| 80|
+-----+----+
-- Sort rows in ascending manner keeping null values to be last.
SELECT name, age FROM person ORDER BY age NULLS LAST;
+-----+----+
| name| age|
+-----+----+
| John| 30|
| Dan| 50|
| Mike| 80|
| Mary|null|
|Jerry|null|
+-----+----+
-- Sort rows by age in descending manner, which defaults to NULL LAST.
SELECT name, age FROM person ORDER BY age DESC;
+-----+----+
| name| age|
+-----+----+
| Mike| 80|
| Dan| 50|
| John| 30|
|Jerry|null|
| Mary|null|
+-----+----+
-- Sort rows in ascending manner keeping null values to be first.
SELECT name, age FROM person ORDER BY age DESC NULLS FIRST;
+-----+----+
| name| age|
+-----+----+
|Jerry|null|
| Mary|null|
| Mike| 80|
| Dan| 50|
| John| 30|
+-----+----+
-- Sort rows based on more than one column with each column having different
-- sort direction.
SELECT * FROM person ORDER BY name ASC, age DESC;
+---+-----+----+
| id| name| age|
+---+-----+----+
|500| Dan| 50|
|400|Jerry|null|
|100| John| 30|
|200| Mary|null|
|300| Mike| 80|
+---+-----+----+