如何获取IN运算符中存在的每个元素的计数?

时间:2016-04-07 10:00:48

标签: sql oracle

select trim(man_date_created) createddate,count(*) recordcount
from man 
where man_status IN ('received','acknowledge')

我希望每个人的数量都像是接受的数量,提交的数量。我怎么能提取它?

3 个答案:

答案 0 :(得分:1)

使用条件聚合

select trim(man_date_created) createddate,
       count(*) recordcount,
       count(case when man_status = 'ACCEPTED' then 1 end) as accepted,
       count(case when man_status = 'SUBMITTED' then 1 end) as submitted,
       count(case when man_status = 'CREATED' then 1 end) as created,
       count(case when man_status = 'REJECTED' then 1 end) as rejected
from man 
where man_status IN ('ACCEPTED','SUBMITTED','CREATED','REJECTED')
group by man_date_created

答案 1 :(得分:0)

我只是做GROUP BY。 (使用派生表中的trim部分,以符合ANSI SQL。)

select createddate, man_status, count(*)
from
(
    select trim(man_date_created) createddate, man_status 
    from man 
    where man_status IN ('ACCEPTED','SUBMITTED','CREATED','REJECTED')
)
group by createddate, man_status

答案 2 :(得分:0)

假设即使它们为零也需要计数,请使用left join代替in

select s.status, count(man.man_status) as recordcount
from (select 'ACCCEPTED' as status from dual union all
      select 'SUBMITTED' as status from dual union all
      select 'CREATED' as status from dual union all
      select 'REJECTED' as status from dual union all
     ) s left join
     man 
     on man.man_status = s.status
group by s.status;

包含日期也会使查询复杂化。