Closed1

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

seiya2130seiya2130

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ヶ月前にクローズされました