如何根据条件分离并计算一个库仑?

时间:2018-06-23 09:11:48

标签: postgresql count case

我想根据其值分隔一列,我该怎么做?我写了这段代码,但是我想在postgresql中使用结束计数功能时使用这种情况。

    select a.xdock_name,
a.BUSINESS_CLOSED,
b.DAMAGED
from(
select
xdock_name, 
COUNT(d.id) as BUSINESS_CLOSED
from 
delivery d join option_definition od on d.par_non_delivery_reason=od.id join xdock xd on xd.id= d.receiver_xdock_id
where date(non_delivery_date) = '2018-04-10' AND option_key='BUSINESS_CLOSED' group by xdock_name) a full outer join 
(
select
xdock_name, 
COUNT(d.id) as DAMAGED
 from 
delivery d join option_definition od on d.par_non_delivery_reason=od.id join xdock xd on xd.id= d.receiver_xdock_id
where date(non_delivery_date) = '2018-04-10' AND option_key='DAMAGED' group by xdock_name) b on a.xdock_name=b.xdock_name

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合:

select
 xdock_name, 
 SUM((option_key='BUSINESS_CLOSED')::int) as BUSINESS_CLOSED,
 SUM((option_key='DAMAGED')::int)         as DAMAGED
from delivery d 
join option_definition od 
  on d.par_non_delivery_reason=od.id 
join xdock xd  
  on xd.id=d.receiver_xdock_id
where date(non_delivery_date) = '2018-04-10' 
  AND option_key IN ('BUSINESS_CLOSED', 'DAMAGED')
group by xdock_name;

FILTER

select
 xdock_name, 
 COUNT(d.id) FILTER (WHERE option_key = 'BUSINESS_CLOSED')  as BUSINESS_CLOSED,
 COUNT(d.id) FILTER (WHERE option_key = 'DAMAGED')          as DAMAGED
from delivery d 
join option_definition od 
  on d.par_non_delivery_reason=od.id 
join xdock xd  
  on xd.id=d.receiver_xdock_id
where date(non_delivery_date) = '2018-04-10' 
  AND option_key IN ('BUSINESS_CLOSED', 'DAMAGED')
group by xdock_name;