Mysql 简化记录计数查询
我有以下格式的表格Mysql 简化记录计数查询,mysql,Mysql,我有以下格式的表格 FIELD TYPE DATA EXAMPLE ---------------------------------------------- id | int(11) | 123 job | int(7) | 456 date | datetime | 0000-00-00 00:00:00 complete | tinyint(4)
FIELD TYPE DATA EXAMPLE
----------------------------------------------
id | int(11) | 123
job | int(7) | 456
date | datetime | 0000-00-00 00:00:00
complete | tinyint(4) | 0 or 1
我需要编写一个查询,它将遍历这个大表,并计算在状态为0和状态为1时每个项目每天有多少条记录
因为同一天可能有多个条目,所以我考虑先运行一个查询并获得唯一的日期:
SELECT DISTINCT DATE(date) AS dt
FROM mytable
ORDER BY DATE(date) ASC
然后在中运行另一个查询并进行计数
SELECT
SUM(id) AS cnt,
job,
DATE(date)
FROM mytable
WHERE complete = 0
AND DATE(date) = '".$uniqueDate."'
GROUP BY job
但是开始有点复杂了,因为我还需要对complete=1运行第二个类似的查询
一定有更好的办法,哈
更新:
数据看起来有点像这样:
is job date complete
-----------------------------------------------
234 324234 2011-06-17 06:59:24 0
235 324234 2011-06-17 08:09:22 1
235 544560 2011-06-18 02:51:12 0
244 677234 2012-07-17 11:12:14 1
基本上,当初始脚本运行时,它将收集数据并以以下格式插入到另一个表中:
stat_jobID (job ID from previous table)
stat_date (date from previous table)
stat_complete (count total)
stat_incomplete (count total)
正如
根据标准完成分组一样,您可以得到每个计数
SELECT job,
complete,
DATE(date) AS report_date,
COUNT(*)
FROM mytable
GROUP BY job, complete, report_date
您还可以旋转它,以便在同一行上获得完整和不完整:
SELECT job,
SUM(complete >= 1) AS completed,
SUM(complete = 0) AS not_completed,
DATE(date) AS report_date
FROM mytable
GROUP BY job, report_date
我们以不同的方式解读需求,但我认为您可能是正确的-每天计算每个作业的0/1行数,而不是我解释的每天0/1行数。是的,我注意到了这一点。我尝试了第二种选择,因为它在一次传球中提供了两种计数,但我认为我没有得到预期的结果。下面是我得到的输出的快照:第三列是“job id”,而不是两列的总和。我希望所有那些job=338的人在那个特定的日期被合并成两行,分别是completed和not。我错过了什么?。。谢谢。你能做一把小提琴吗?嗯,小提琴。酷。我试着把一些东西放进去:我还注意到complete不是0/1,而是0-100,所以我将我的查询改为SUM(complete>0)作为completed,您能用一组示例输入记录和您希望生成的附带输出行来澄清吗?下面是对您的要求的两种不同解释。更新了说明。谢谢。因此,对于这3个作业
编号中的每一个,结果应该是1行,324234
应该有1,1表示stat\u complete,stat\u complete
,而另外两个应该有1,0
和0,1
?