Hatena::ブログ(Diary)

aikeの日記 RSSフィード

2010-01-15 SQLのORDER BYにCASE式が使えてちょっと嬉しかったお話

SQLで検索結果をソートするときってorder by使うよね。でもさ、単純に大きい順とか五十音順とかじゃなくて、ひと工夫したいときってあるじゃないですか。

たとえば、国名のリストをアルファベット順でソートして一覧表示するけど、利便性を考えて日本は一番上に表示したい、とかね。

で、まあ、そういうときは表示順のソートキーを別項目として持ったりするのがいいんだろうなって思ってたんだけど、最近シンプルな解決策を教わりました。

select
  country_name
from
  t_country
order by
  case country_name when 'Japan' then 1 else 2 end,
  country_name

ソートの第1条件として'Japan'かどうかを判断して、第2条件として国名を見る、という方法。

やー、SQLは奥が深いな。

★ 2010/09/17 17:37 ちょうど上記解決策を探していたので、
とってもためになりました★

ziwaziwa 2010/11/05 18:41 かなり助かりました。ありがとうございました。

しのしの 2011/02/16 20:40 めちゃ助かりました!

みなみな 2013/12/20 18:53 ちなみにunionするとcase文書けなくなるのでその場合は全体をselectでくくってサブクエリにして外側でorder by すれば同様にcase文が使えます

のののの 2017/04/12 19:32 ありがとう!

こうこう 2017/05/30 10:58 ...
order by
country_name in ('Japan') desc,
country_name

でもいいですよ