15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLで検索する時、空白やNULLのデータを後ろに並べたい

Posted at

テストデータ

例えば、以下のテーブルがあるとする。

id name age type
1 佐藤 一郎 21 A
2 鈴木 次郎 27
3 高橋 三郎 22 A
4 田中 四郎 26 (NULL)
5 伊藤 五郎 23 F
6 渡辺 六郎 25 E
7 山本 七郎 24 R

このテーブルのtypeで整列させたい場合、何も考えずに書くと下記のようになると思う。

SELECT * FROM table_name ORDER BY type ASC;

ところが、この場合の抽出結果は、残念ながらこちら。

id name age type
4 田中 四郎 26 (NULL)
2 鈴木 次郎 27
1 佐藤 一郎 21 A
3 高橋 三郎 22 A
6 渡辺 六郎 25 E
5 伊藤 五郎 23 F
7 山本 七郎 24 R

データが入ってないなら、後ろへ

「これで良いや」という場合もあるし、「空白とか入らないようにしろよ」という考えもある。
しかし、世の中どうしようもない時がある。(うちのシステムみたいに、既に稼働中だったり)
そんな時には、

SELECT * FROM table_name ORDER BY
case
	when type is NULL then '2'
	when type = '' then '1'
	else '0'
end, type ASC;

で、解決できる。
「ちゃんと入力されているレコード」 < 「空白」< 「NULL」で先に並べてからソートする訳です。

id name age type
1 佐藤 一郎 21 A
3 高橋 三郎 22 A
6 渡辺 六郎 25 E
5 伊藤 五郎 23 F
7 山本 七郎 24 R
2 鈴木 次郎 27
4 田中 四郎 26 (NULL)
15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?