我想根据其值分隔一列,我该怎么做?我写了这段代码,但是我想在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
答案 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;