Sql 根据第三个表上的条件筛选的两个表上的Groupby计数查询

Sql 根据第三个表上的条件筛选的两个表上的Groupby计数查询,sql,Sql,我有三个表格:分类表、邮件表和分类表。本SQLFIDLE中概述了表之间的关系,并提供了一些示例数据: 我首先运行一个查询以获取分配给每个类别的电子邮件数量: SELECT Category.name, count(Classification.category_id) FROM Category LEFT OUTER JOIN Classification ON Classification.category_id = Category.id GROUP BY Category.name 这

我有三个表格:分类表、邮件表和分类表。本SQLFIDLE中概述了表之间的关系,并提供了一些示例数据:

我首先运行一个查询以获取分配给每个类别的电子邮件数量:

SELECT Category.name, count(Classification.category_id) FROM Category LEFT OUTER JOIN Classification ON Classification.category_id = Category.id GROUP BY Category.name 
这很好用

但是我现在想添加一个基于电子邮件收集中日期的过滤器。如果我加入了过滤器集合:

SELECT Category.name, count(Classification.category_id) FROM Category JOIN Mail ON Mail.date < '2019-03-24' LEFT OUTER JOIN Classification ON Classification.category_id = Category.id GROUP BY Category.name 
但现在计数只增加了一倍,而且似乎连过滤器都没有应用。为什么过滤器不工作?我应该做什么来修复它?

您需要分类和邮件之间的连接条件:


示例数据、期望的结果和数据库标记都很有用。
SELECT Category.name, count(Classification.category_id) FROM Category JOIN Mail ON Mail.date < '2019-03-24' LEFT OUTER JOIN Classification ON Classification.category_id = Category.id GROUP BY Category.name 
SELECT ca.name, count(cl.category_id)
FROM Category LEFT JOIN
     Classification cl
     ON cl.category_id = c.id LEFT JOIN
     Mail m
     ON m.id = cl.mail_id AND  -- your JOIN key goes here
        m.date < '2019-03-24'
GROUP BY c.name ;