< 衝撃のゼロサプレス | 連番フォルダ作成バッチ >

September 10, 2004

以上とか、未満とか。

このあいだ、使おうと思ったときに思い出せなかったので。

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

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?