2013-10-18 74 views
2

我想統計每天發送多少封電子郵件,發送的電子郵件數量每天都有「錯誤」狀態,每天有多少個「隊列」狀態。MySql計數分爲3列

這是我的表結構的一個例子:

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個錯誤,則所有錯誤狀態電子郵件被分組到一個日期20而不是分發到他們發生的日期。

這裏是我想要的結果的例子:

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

任何援助將不勝感激。

這是我第一次發表任何論壇,因爲我是一個新的Web開發人員,所以任何意見或問題與我發佈會有所幫助。

感謝

+0

此外,我忽略提及所有的錯誤狀態電子郵件將有一個date_sent值爲null(「0000-00-00 00:00:00」),但我確實控制這種情況與ifnull和使用If語句DATE_FORMAT函數用有效值替換NULL值(在這種情況下,這是電子郵件請求的日期) – user2895962

+0

以下是包含date_sent值檢查的查詢: – user2895962

+0

IF(DATE_FORMAT(date_sent,'%Y ')='0000',date_entered,date_sent))AS date_sent, \t COUNT(IF(DATE_FORMAT(date_sent,'%Y')='0000',DATE_FORMAT(date_entered,'%Y-%m-%d') ,DATE_FORMAT(date_sent,'%Y-%m-%d')))總計 \t SUM(IF(status = 3,1,0))errorcount, \t SUM atus = 1,1,0))queuecount FROM sendmail GROUP BY DATE_FORMAT(date_sent,'%Y-%m-%d') – user2895962

回答

4

您應該僅由date_sent組,而不是由status,因爲你在輸出列計數不同的狀態。

+0

感謝您的回覆。我試了兩次,結果沒有任何區別。 – user2895962

+0

你可以用示例數據製作一個sqlfiddle嗎? – Barmar