在 SQL GroupBy 查询中包含零计数

Including Zero Count in a SQL GroupBy Query

我有两个 table,我想通过组合这个 table 在我的应用程序中获取每月摄取的数据,并且该计数也应该包括零。如果应用程序中没有摄取数据,那么它也应该出现在结果集中。 但是使用下面的查询我无法包含零计数。不确定我在这里做错了什么。

`select count(*) as Total_Count, appprofile as Application
from Reference r
LEFT OUTER JOIN docapplication d ON 
d.did = r.did where
d.appprofile in ('EbsApp_0','EbsApp_2','EbsApp_3','EbsApp_4','EbsApp_5','EbsApp_6','EbsApp_8','EbsApp_9','EbsApp_10','EbsApp_11','EbsApp_12','EBS_DOC1','EBS_DOC2')
and
r.CREATEDATE >= '1-Jul-21 12.00.00.000000000 AM' and 
r.CREATEDATE <= '31-JUL-21 11.59.00.000000000 PM'
group by d.appprofile
order by d.appprofile;`

结果:

您似乎想对每个应用程序的引用进行计数。所以 select 来自应用程序和外部连接引用,反之亦然。使用不可为 null 的引用列进行计数。它在外部连接的行中将为空,因此不计算在内,如果应用程序没有引用,则结果为零。

请注意,外连接 table 的条件属于 ON 子句。如果应用程序没有引用匹配,则外部连接行中的引用列将为空。如果您在 WHERE 子句中放置一个条件(例如 where outer_joined.column > 1),您将忽略外部连接行并最终得到一个纯粹的内部连接。

我也修改了你的日期比较。永远不要比较日期和字符串。使用日期文字或时间戳文字。

select
  count(r.did) as total_count,
  d.appprofile as application
from docapplication d
left outer join reference r on r.did = d.did
                           and r.createdate >= date '2021-07-01'
                           and r.createdate < date '2021-08-01'
where d.appprofile in ('EbsApp_0', 'EbsApp_2', 'EbsApp_3', 'EbsApp_4', 'EbsApp_5',
                       'EbsApp_6', 'EbsApp_8', 'EbsApp_9', 'EbsApp_10', 'EbsApp_11',
                       'EbsApp_12', 'EBS_DOC1', 'EBS_DOC2')
group by d.appprofile
order by d.appprofile;