SQLのORDER BYに条件をつける

「VistaからXPにアップグレードする」などといわれているVistaですが、SP1が11月にでるっぽい?でたら使えるようになるっぽい?

というわけでORDER BYですが、よく使うのは「ORDER BY ASC」「ORDER BY DESC」だと思います。
でも、実は「ORDER BY 条件」ってできるっぽいです。
例えば(SQLITEですが)


create table test (id integer primary key, name blob, number integer);
insert into test (name,number) values("a", 10);
insert into test (name,number) values("b", 11);
insert into test (name,number) values("c", 12);
insert into test (name,number) values("d", 100);
insert into test (name,number) values("e", 101);
insert into test (name,number) values("f", 102);
insert into test (name,number) values("g", 1000);
insert into test (name,number) values("h", 1001);
insert into test (name,number) values("i", 1002);
insert into test (name,number) values("j", 13);
insert into test (name,number) values("k", 14);
insert into test (name,number) values("l", 15);

に対して


select * from test order by number >= 10 and number <= 101 DESC;
id          name        number
----------  ----------  ----------
1           a           10
2           b           11
3           c           12
4           d           100
5           e           101
10          j           13
11          k           14
12          l           15
6           f           102
7           g           1000
8           h           1001
9           i           1002

となります。つまり、ORDER BYの後に続く条件に見合うものが上位に来る感じです。
SQLITEの場合、比較が文字列比較になってるところがあるらしく、SQLITE3とSQLITE2で微妙に結果が異なります。
MySQLとかだとまたちょっと違う結果になるかもしれませんが、条件に見合うものを上位に持ってくることが可能です。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: Tips パーマリンク

コメントを残す

メールアドレスが公開されることはありません。