Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 简化记录计数查询_Mysql - Fatal编程技术网

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