以上とか、未満とか。
- [Database]
このあいだ、使おうと思ったときに思い出せなかったので。
Oracle で、SQL を書く時に、各行について、「ある列が5以上かどうか」を真偽値でとりたい場合がある。こういうのは、DECODE 関数と LEAST 関数、GREATEST 関数なんかを駆使すると可能。たとえば、EMP表のSALが1000未満の人数、1000以上3000未満の人数、3000以上5000未満の人数、5000の人数を求めたいような場合を考えてみる。(もちろん、WHERE句で条件を指定して、COUNTした結果をUNIONすればいいのだけれど。)
SELECT SUM( DECODE( LEAST( SAL, 1000 ), 1000, 0, 1 ) ) AS "1000未満", SUM( DECODE( LEAST( SAL, 1000 ), 1000, DECODE( LEAST( SAL, 3000 ), 3000, 0, 1 ) ) ) AS "1000以上3000未満", SUM( DECODE( LEAST( SAL, 3000 ), 3000, DECODE( LEAST( SAL, 5000 ), 5000, 0, 1 ) ) ) AS "3000以上5000未満", SUM( DECODE( LEAST( SAL, 5000 ), 5000, 1, 0) ) AS "5000以上" FROM EMP /
1000未満 1000以上3000未満 3000以上5000未満 5000以上 ---------- ---------------- ---------------- ---------- 2 9 2 1 SQL>
EXCELの配列数式のテクニックとよく似てるけどね。まとめると以下のようになる。
1000 | 以外 | |
---|---|---|
LEAST( foo, 1000 ) | fooは1000以上 | fooは1000未満 |
GREATEST( foo, 1000 ) | fooは1000以下 | fooは1000より大きい |
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/634
コメント