我想计算两个表中的记录数,并根据其中一个计数表的日期将它们组合在一起。
目前,我有这个问题:
SELECT COUNT(DISTINCT efu.id) AS TotalCollections, COUNT(DISTINCT ccs.id) AS TotalCases, efu.completion_date
FROM enviro_figures_upload efu
LEFT JOIN customer_cases_upload ccs ON ccs.customer_site = efu.customer_site
WHERE efu.customer_site = "TGI Friday's Glasgow"
GROUP BY DATE_FORMAT(efu.completion_date, '%m-%Y') DESC
ORDER BY YEAR(efu.completion_date) ASC, MONTH(efu.completion_date) ASC
其中输出以下结果:
TotalCollections TotalCases completion_date
52 8 2014-05-21
73 8 2014-06-23
83 8 2014-07-02
89 8 2014-08-22
87 8 2014-09-21
68 8 2014-10-06
85 8 2014-11-20
59 8 2014-12-10
17 8 2015-01-05
但是,TotalCases
列未被正确计算。该表中共有8条记录,但在查询中,应根据日期计算案例数(也称为completion_date
)。有些情况TotalCases
将返回0,但应包含TotalCollections
和completion_date
。
所以真的应该是:
TotalCollections TotalCases completion_date
52 2 2014-05-21
73 1 2014-06-23
83 1 2014-07-02
89 0 2014-08-22
87 0 2014-09-21
68 1 2014-10-06
85 0 2014-11-20
59 2 2014-12-10
17 1 2015-01-05
我该怎么做?
修改
以下是enviro_figures_upload
表中的一些示例数据:
id completion_date
124114 2014-09-30
124134 2014-10-31
124146 2014-05-23
124148 2014-05-24
124149 2014-05-26
124150 2014-05-27
124151 2014-05-28
124152 2014-05-25
124153 2014-05-29
124193 2014-05-31
124194 2014-05-24
124195 2014-05-26
124196 2014-05-27
124197 2014-05-28
以下是customer_cases_upload
的一些示例数据:
id completion_date
2519 2014-10-17
2520 2014-12-15
2521 2014-07-28
2522 2014-12-12
2523 2014-09-27
2524 2014-11-03
2525 2014-05-30
2526 2014-05-22
答案 0 :(得分:1)
TotalCases
显示8,因为customer_cases_upload.completion_date
没有约束。
尝试:
SELECT COUNT(DISTINCT efu.id) AS TotalCollections, COUNT(DISTINCT ccs.id) AS TotalCases, efu.completion_date
FROM enviro_figures_upload efu
LEFT JOIN customer_cases_upload ccs ON ccs.customer_site = efu.customer_site
and year(efu.completion_date) = year(css.completion_date)
and month(efu.completion_date) = month(css.completion_date)
WHERE efu.customer_site = "TGI Friday's Glasgow"
GROUP BY DATE_FORMAT(efu.completion_date, '%m-%Y')
ORDER BY YEAR(efu.completion_date) ASC, MONTH(efu.completion_date) ASC
答案 1 :(得分:0)
我不太确定customer_site列是什么,因为该列未包含在您的示例数据中,但我认为您的LEFT JOIN需要更具体。对于WHERE子句中引用的customer_site,customer_cases_upload表中总共有8条记录。无论completion_date如何,LEFT JOIN都会将所有8条记录连接到enviro_figures_upload表的每一行。 customer_cases_upload completion_date是否与相应的enviro_figures_upload completion_date匹配?如果是这样,请在LEFT JOIN的ON子句中包含此内容,仅将customer_cases_upload行连接到具有相同completion_date的enviro_figures_upload行。