SQLの小技(1)_MySQLのORDER BY

やりたいこと


MySQL の ORDER BYで、下記の並び替えをしたい

  • NULLを末尾に並び替え
  • 任意の値を末尾に並び替え
  • 指定した任意の順番に並び替え(並び順を明示)

Excelでの並び替えと似ていますね。

背景


メール配信でリストを作成していました。

特定の項目を降順に並び替えたいときに、ORDER BY 列 DESC と書くとNULLが先頭になりました。これを末尾に並び替えしたいと思います。

SQL


  1. ORDER BY 列 IS NULL ASC

  2. ORDER BY 列 = 'hoge' ASC, -- 「hoge」を末尾にする

  3. ORDER BY FIELD(列,'松','竹','梅') ASC

    • 松竹梅の順で表示したい

    •  ASCは省略可

1~3の組合せ

ORDER BY 
 pos_plan IS NULL, -- NULLを末尾に並び替え
 pos_plan = 'hoge', -- 任意の値を末尾に並び替え
 FIELD(pos_plan, '松', '竹', '梅') -- 指定した任意の順番に並び替え(並び順を明示)

以上で意図した通りに並び替えできました。結果を貼った方がわかりやすいのですが、 SQL結果をそのまま公開できないため、結果は省略します。

何か方法を考えた方が良さそうですね。

蛇足


はてなブログでもMarkdown記法が使えるんですね。

ja.wikipedia.org

初めは「編集 見たまま」で書いていましたが、Markdownで書くことにしました。 MacWIndowsでそれぞれショートカットを覚えるくらいならMarkdownで書いた方が早いと感じたからです。

このことも後日まとめようと思います。

以上です。