数据库中有合同签订日期和合同终止日期的列。我需要按日期分组合同签订数量和合同取消数量。
我写了一些问题
with conn as (select date_signing::date as dt_sign, count(date_signing) as signing from services GROUP by date_signing::date),
disconn as (select date_cancellation::date as dt_canc, count(date_cancellation) as cancelling from services GROUP by date_cancellation::date)
select * from conn full join disconn on conn.dt_sign = disconn.dt_canc
字符串
结果如下:
的数据
但我需要这个结果(例如):
date signing cancelling
2019-08-09 1 null
2020-05-05 null 1
型
我需要一个日期栏和签署和终止栏看到的动态。请告诉我在哪个方向思考。
2条答案
按热度按时间1szpjjfi1#
FULL JOIN
看起来很适合这个工作。小建议:字符串
为了简化,使用相同的列别名并与
USING
子句联接以获得单个输出列。此外,
count(*)
更快,并且在这方面是等效的(除了还获得the_date IS NULL
的正确计数)。相关:
zlhcx6iw2#
如果您不想在此报表中出现空白,特别是如果您想放大某个期间,请生成一个日历并对其进行
left join
计算。基于此计算也会生成一个适当的零,而不是null
.Demo at db<>fiddle:字符串
如果你喜欢你现在的布局,你根本不需要
join
。读出日期和sum()
:型
或具有类似的预聚合/子聚合:
型
Performance&plans的
unnest()
转换为聚合体: