2012-11-19 60 views
-1

我的表結構是:如何計算每天按列分組的值的次數?

CREATE TABLE `survey` (
    `id` int(11) NOT NULL auto_increment, 
    `submitdate` datetime default NULL, 
`answer` varchar(5) collate utf8_unicode_ci default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=499 ; 

這裏answer包含的值,如A1,A2,A3。

我想根據回答計算最近10天的記錄。在某一天沒有記錄,應該是零。

我想輸出是

date   count answer 
19-11-2012  10 a1 
19-11-2012  8 a2 
19-11-2012  0 a3 
18-11-2012  30 a1 
18-11-2012  30 a2 
18-11-2012  30 a3 

我用了一個查詢像

SELECT days.day, count(survey.id) 
FROM 
    (select curdate() as day 
    union select curdate() - interval 1 day 
    union select curdate() - interval 2 day 
    union select curdate() - interval 3 day 
    union select curdate() - interval 4 day 
    union select curdate() - interval 5 day 
    union select curdate() - interval 6 day 
    union select curdate() - interval 7 day 
    union select curdate() - interval 8 day 
    union select curdate() - interval 9 day) days 
    left join survey 
    on days.day = date(survey.submitdate) 
group by 
    days.day 

回答

0

您可以通過使用SUBDATE功能回首10天,比較使用「>」日期。您還希望GROUP BY答案以及當天,因爲您試圖計算每天每個答案的計數。

SELECT DATE(submitdate) AS day 
answer, 
COUNT(*) AS answer_count 
FROM survey 
WHERE DATE(submitdate) > DATE(SUBDATE(CURRENT_DATE, 10)) 
GROUP BY day, answer; 
+0

謝謝你的回答。但它在那個特定的日子裏沒有記錄。 – jaya

+0

你有答案表,記錄所有可能的答案嗎? –

+0

期望的示例答案表也提到了問題。 – jaya

相關問題