MySql计数按3列分组

时间:2013-10-18 19:10:58

标签: mysql

我想要计算每天发送的电子邮件数量,每天发送的电子邮件中有多少每天都有“错误”状态,每天有多少电子邮件处于“排队”状态。

以下是我的表结构示例:

mail_id (int)
date_sent (datetime)
status (tinyint) (1=queue, 2=sent, 3=error)

这是我的问题:

SELECT date_sent, 
       COUNT(date_sent) AS total, 
       SUM(IF(status = 3, 1, 0)) errorcount, 
       SUM(IF(status = 1, 1, 0)) queuecount 
FROM sendmail 
GROUP BY date_sent, status

以下是我的结果示例:

date_sent     total errorcount      queuecount
2013-02-11    50       50          10 
2013-02-11     1        0           0
2013-02-11     1        0           0
2013-02-11     1        0           0
2013-02-12     1        0           0
2013-02-12     1        0           0
2013-02-12     1        0           0 
2013-02-12     1        0           0
2013-02-12     1        0           0
2013-02-13     1        0           0
2013-02-13     1        0           0
2013-02-13     1        0           0

例如,如果整个时间段内总共有50个错误,则所有错误状态电子邮件都会分组到一个日期2013-01-11,而不是分发到它们发生的日期。

这是我想要的结果的一个例子:

date_sent   total           errorcount              queuecount
2013-02-11   4                1                       1 
2013-02-12   5                2                       1
2013-02-13   3                1                       1

非常感谢任何协助。

这是我在任何论坛上发表的第一篇文章,因为我是一名新的网页开发人员,因此对我发布的任何建议或问题都会有所帮助。

由于

1 个答案:

答案 0 :(得分:4)

您应该只按date_sent分组,而不是status分组,因为您在计算输出列中的不同状态。