如何解决在一个SQL查询中合并两个COUNT
我需要查询以显示new_customers X个customers_cancellations
select count(start_date),to_char(start_date,'MM') as monthNumber,'YY') as yearNumber from customer where start_date is not null group by to_char(start_date,'MM'),'YY') order by yearNumber,monthNumber;
与此同时,我可以按月获得客户取消订单:
select count(cancellation_date),to_char(cancellation_date,'YY') as yearNumber from customer where cancellation_date is not null group by to_char(cancellation_date,monthNumber;
count| monthnumber |yearnumber 1 | 1 | 20 7 | 2 | 20 5 | 3 | 20
但是我想要这样的东西:
customer_out_count|customer_in_count| monthnumber |yearnumber 0 |1 | 1 | 20 0 |7 | 2 | 20 1 |0 | 3 | 20 0 |1 | 4 | 20 5 |7 | 5 | 20 1 |5 | 6 | 20
select 'start' as type,count(start_date) as count,'YY') as yearNumber from customer where start_date is not null group by to_char(start_date,'YY') union select 'cancellation' as type,count(cancellation_date) as counta,'YY') as yearNumber from customer where cancellation_date is not null group by to_char(cancellation_date,'YY') order by yearNumber,monthNumber;
结果没问题:
type |newcount | monthnumber |yearnumber start |1 | 1 | 20 cancellation |1 | 1 | 20 cancellation |7 | 2 | 20 start |3 | 3 | 20 cancellation |1 | 4 | 20 start |7 | 5 | 20 start |5 | 6 | 20
但是我将需要对代码做一些操作才能实现我所需要的。
如何将这两个查询合并为一个?我正在使用postgreslq。
解决方法
一个选项取消对行的透视,然后聚合。在Postgres中,您可以通过横向联接来表达这一点:
select
sum(x.customer_in_count) as customer_in_count,sum(x.customer_out_count) as customer_out_count
to_char(x.dt,'MM') as monthNumber,to_char(x.dt,'YY') as yearNumber
from customer c
cross join lateral (values
(c.start_date,1,0),(c.cancellation_date,1)
) as x(dt,customer_in_count,customer_out_count)
where x.dt is not null
group by monthNumber,yearNumber
order by monthNumber,yearNumber
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。