我现有表结构如下:
t_id t_type t_flag
1 水果 过期
2 食品 正常
3 干果 正常
4 水果 正常
5 水果 过期
6 食品 过期
现在我想查询的结果如下:
t_type 总数 过期个数
水果 3 2
食品 2 1
干果 1 0
with a as (select 1 id,'水果' type,'過期' FLAG FROM DUAL
UNION
select 2 id,'食品' type,'正常' FLAG FROM DUAL
UNION
select 3 id,'干果' type,'正常' FLAG FROM DUAL
UNION
select 4 id,'水果' type,'正常' FLAG FROM DUAL
UNION
select 5 id,'水果' type,'過期' FLAG FROM DUAL
UNION
select 6 id,'食品' type,'過期' FLAG FROM DUAL
)
第一種方法
select type,count(type) 總數,sum(decode(flag,'過期',1,0)) 過期個數 from a
group by type
第二種方法
select type,count(type),sum(eee) from
(select type,case when flag='過期' then 1
else 0 end eee from a)
group by type
以后能用DECODE的話盡量用DECODE,這樣要簡單的多,只要能用DECODE的語句都可以轉換為CASE WHEN,而CASE WHEN 語句則不一定可以轉換為DECODE
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10768286/viewspace-83489/,如需转载,请注明出处,否则将追究法律责任。