SQL:条件付きソート

最終更新日時:2017-02-15 15:59:59
MySQL PostgreSQL

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



お問い合わせは 掲示板 にて。