简化记录计数查询

时间:2014-03-03 18:08:56

标签: mysql

我有一个表格,格式如下。

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。 / p>

因为同一天可能有多个条目,我想到首先运行一个查询并获取唯一日期:

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

但是开始变得有点复杂,因为我还需要为完成= 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)

1 个答案:

答案 0 :(得分:2)

complete符合GROUP BY条件,因此您可以获得每个计数。

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

SQLFIDDLE