2

我想在一张表中计算不同的条件:

SELECT gt.smechanic as 'Mech ID', 
       gm.mechanic_name as 'Mech Name', 
       count(gt.smechanic) as 'Total Invoices Not Received',
       count(if(datediff(gt.dispatch_date, curdate()) < 10,1,0)) as 'Within 10 days' 
from gt 
straight_join gm on gt.smechanic = gm.mechanic_id 
where gt.status = 3 or gt.status = 5 
group by gt.scheduled_mechanic

我不确定我是否用这个语句取消了自己,因为在我计算的两列中返回了相同的值。

4

1 回答 1

3

您需要SUM()在第二列中使用,而不是COUNT(): COUNT 仅计算记录,它不关心其中的值是 0 还是 1。但是,SUM 将返回符合您条件的所有记录的总数。

SUM(IF(DATEDIFF(gt.dispatch_date, CURDATE()) < 10, 1, 0))

我还要指出,选择未分组的非聚合列会使您容易受到不可预测的结果的影响。我会将 GROUP BY 子句更改为

GROUP BY gt.smechanic, gm.mechanic_name
于 2012-09-21T18:52:30.007 回答