カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

ORDER BY句で使える条件式

この記事は最終更新日から1年以上経過しています。

SQLのORDER BY句では、特定のカラムを昇順や降順に並べ替えることができます。
更にCASE式を使えば任意の並び順にすることも可能です。

今回は、特定のカラムがNULLとなる場合があるテーブルで、NULLは最後にまとめて表示し、それ以外は昇順の表示になるようにしてみたいと思います。

例として以下のようなテーブルがあったとします。

TEST_TABLE
id name age
1 赤井 35
2 池田 22
3 内山 NULL
4 江崎 54
5 太田 NULL

年齢の昇順でデータを表示してみましょう。

SELECT * FROM TEST_TABLE ORDER BY age;

そうすると、NULLが先に表示され、それ以降が年齢の昇順という形になるかと思います。

TEST_TABLE
id name age
3 内山 NULL
5 太田 NULL
2 池田 22
1 赤井 35
4 江崎 54

これを、NULLは最後にまとめて表示し、それ以外を年齢の昇順で表示したい…というのが今回の焦点でしたね。
そのような場合にORDER BY句でCASEの条件式を使います。

SELECT * FROM TEST_TABLE 
ORDER BY
    CASE WHEN age IS NULL THEN 2 ELSE 1 END,
    age;

このようにORDER BY句でCASE式を使用し、年齢がNULLの場合の優先順位を下げてあげるわけです。
その後、年齢の昇順を指定しているので、実行結果の並び順は以下のようになります。

TEST_TABLE
id name age
2 池田 22
1 赤井 35
4 江崎 54
3 内山 NULL
5 太田 NULL

ただし、パフォーマンスはあまりよくないようなので、大規模なデータベースで使うのは避けたほうが良いかもしれません。

使いようによっては便利なので、是非一度試してみてください。

公式マニュアル:
https://docs.microsoft.com/ja-jp/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver16#Case

この記事がお役に立ちましたらシェアお願いします
457 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です