SQL:条件付きソート
MySQL や PostgreSQL では、ORDER BY でソートする対象として CASE WHEN 句が使えます。
これにより、条件付きのソートを実現することが出来ます。
例1
管理者/非管理者の順でソートしつつ、それぞれはメールアドレス順にソートする例です。
users.role=90 が管理者とします。
SELECT * FROM users ORDER BY (CASE WHEN role=90 THEN 1 ELSE 2 END), email
例2
メールアドレスを持っている/持っていないユーザーでソートしつつ、それぞれは ID 順にソートする例です。
メールアドレスを持っていないユーザーは users.email が null であるとします。
SELECT * FROM users ORDER BY (CASE WHEN email IS NULL THEN 1 ELSE 2 END), id