Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何根据条件分离和计算一个colunm?_Postgresql_Count_Case - Fatal编程技术网

Postgresql 如何根据条件分离和计算一个colunm?

Postgresql 如何根据条件分离和计算一个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

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