2012-11-19 59 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

相关问题