概要
SQLでORDER BYを使用して並び替える際のバリエーションをまとめています。
確認環境
- PostgreSQL 9.6
使用するテーブル
id | name | age |
---|---|---|
0001 | Alice | 25 |
0002 | Bob | 27 |
0003 | Carol | 30 |
0004 | Dave | 60 |
0005 | Eve | 60 |
DDL(テーブル作成)
CREATE TABLE
employee
( id VARCHAR,
name VARCHAR,
age INTEGER,
PRIMARY KEY (id));
DML(データ挿入)
INSERT INTO employee VALUES('0001','Alice',25);
INSERT INTO employee VALUES('0002','Bob',27);
INSERT INTO employee VALUES('0003','Carol',30);
INSERT INTO employee VALUES('0004','Dave',60);
INSERT INTO employee VALUES('0005','Eve',60);
基本的なソート
列を指定して、昇順に並び替えます。
昇順に並び替える場合はORDER BYでASCを指定します。
ここでは、idを昇順で並び替えます。
SELECT
*
FROM
employee
ORDER BY
id ASC;
id | name | age |
---|---|---|
0001 | Alice | 25 |
0002 | Bob | 27 |
0003 | Carol | 30 |
0004 | Dave | 60 |
0005 | Eve | 60 |
列を指定して、降順に並び替えます。
昇順に並び替える場合はORDER BYでDESCを指定します。
ここでは、idを降順で並び替えます。
SELECT
*
FROM
employee
ORDER BY
id DESC;
id | name | age |
---|---|---|
0005 | Eve | 60 |
0004 | Dave | 60 |
0003 | Carol | 30 |
0002 | Bob | 27 |
0001 | Alice | 25 |
複数条件を指定してソート
複数の条件を指定してソートします。
ここでは、ageの降順で並び替えた後に、idの昇順で並び替えてみます。
SELECT
*
FROM
employee
ORDER BY
age DESC,
id ASC;
id | name | age |
---|---|---|
0004 | Dave | 60 |
0005 | Eve | 60 |
0003 | Carol | 30 |
0002 | Bob | 27 |
0001 | Alice | 25 |
ちなみに、ageの降順で並び替えた後に、idの降順で並び替えた結果は以下となります。
SELECT
*
FROM
employee
ORDER BY
age DESC,
id DESC;
id | name | age |
---|---|---|
0005 | Eve | 60 |
0004 | Dave | 60 |
0003 | Carol | 30 |
0002 | Bob | 27 |
0001 | Alice | 25 |
条件を分岐してソート
並び替えする場合に、場合によっては、条件1に合致するデータを上位に配置して、その他のデータ内で条件2と条件3で並び替えしたい場合があると思います。その場合の方法を記載します。
ここでは、ageが30未満のデータとそれ以外でグループ分けして、それぞれのデータ内でageを降順に並び替えた後、idの降順で並び替えを行います。
SELECT
*
FROM
employee
ORDER BY
CASE WHEN age < 30 THEN 1
ELSE 2
END ASC,
age DESC,
id ASC;
id | name | age |
---|---|---|
0002 | Bob | 27 |
0001 | Alice | 25 |
0004 | Dave | 60 |
0005 | Eve | 60 |
0003 | Carol | 30 |
コメント