Closed1
【SQL】CASE … WHEN … THEN 0 ELSE 1 END

SQL の CASE … WHEN … THEN 0 ELSE 1 END は、ORDER BY 句の中で条件に合致する行を先に、そうでない行を後に並べたいとき使用する
SELECT *
FROM your_table
ORDER BY
CASE
WHEN <条件式> THEN 0
ELSE 1
END ASC,
<その他のソートキー> DESC;
WHEN <条件式> THEN 0:条件を満たす行には 0 を返す
ELSE 1:条件を満たさない行には 1 を返す
まず 0 の行(条件を満たす行)が来て、そのあと 1 の行(条件を満たさない行)が来る
例
id | name | department | hired_at |
---|---|---|---|
1 | 田中 | Sales | 2023-05-01 |
2 | 佐藤 | Engineering | 2024-01-15 |
3 | 鈴木 | Sales | 2022-11-20 |
4 | 高橋 | Marketing | 2023-08-10 |
5 | 伊藤 | Engineering | 2024-03-05 |
まず Sales 部門の社員を、次にそれ以外の社員を、それぞれ最新入社順に並べたい場合
SELECT *
FROM employees
ORDER BY
CASE
WHEN department = 'Sales' THEN 0
ELSE 1
END ASC, -- Sales 部門が先
hired_at DESC; -- 各グループ内は入社日の降順
これを実行すると、まず department = 'Sales' の社員(id=1,3)が来て、そのうち入社日が新しい順(2023-05-01 → 2022-11-20)に並び、ついでその他の社員(id=5,2,4)が入社日の降順(2024-03-05 → 2024-01-15 → 2023-08-10)で続く。
結果セット順はこうなります
id | name | department | hired_at |
---|---|---|---|
1 | 田中 | Sales | 2023-05-01 |
3 | 鈴木 | Sales | 2022-11-20 |
5 | 伊藤 | Engineering | 2024-03-05 |
2 | 佐藤 | Engineering | 2024-01-15 |
4 | 高橋 | Marketing | 2023-08-10 |
このスクラップは4ヶ月前にクローズされました