Oracleコレクション関数(count,sumなど)とcase whenの組合せ使用

768 ワード

表のフィールドがステータスフィールドまたはタイプフィールドであり、様々なステータスまたはタイプのレコード数を統計する必要がある場合、一般的にどのように実現されますか?仮に表Aとして、1つのフィールドがステータスフィールドであり、ステータス値が1,2,3であるとしても、クエリ条件が複雑であれば、この文は見られない表連合、groupbyにかかわると、より複雑になる
select 
(select count(*) from A where state=1 and      ) as state1,
(select count(*) from A where state=2 and      ) as state2,
(select count(*) from A where state=3 and      ) as state3,
from dual

テーブルクエリが3回実行されました
改善後:
select 
	count(case when state= 1 then state end) as state_1,
	count(case when state= 2 then state end) as state_2,
	count(case when state= 3 then state end) as state_3
from A 
where state=1 and     

テーブルクエリーを1回だけ必要とします.
文が複雑であればあるほど、集合関数とcase whenの組み合わせを使用すると簡素化され、効率的になります.