Postgresql 如何根据条件分离和计算一个colunm?
我想根据一列的值来分隔它,我该怎么做?我写了这段代码,但我想在postgresql中使用结束计数函数时使用casePostgresql 如何根据条件分离和计算一个colunm?,postgresql,count,case,Postgresql,Count,Case,我想根据一列的值来分隔它,我该怎么做?我写了这段代码,但我想在postgresql中使用结束计数函数时使用case 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 joi
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
您可以使用条件聚合:
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;
或过滤器
:
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;