2016-06-18 70 views
1

此查询将返回一份工程师名称列表,其中包含测试结果的工程师姓名列表,其中列出了他们在过去一小时内测试的内容,错误内容,工作内容以及每位工程师的总计。最后一行中的总计查询

我希望能够在底部添加一行,这些数额将总计这些数额,但我挣扎,任何人有任何建议吗?

select distinct qcheck.checkby, 
       ifnull(fully,0) as fully, 
       ifnull(faulty,0) as faulty, 
       ifnull(lasthour,0) as lasthour, 
       ifnull(total,0) as total 
from   qcheck 
left join  (
       select count(*) AS fully, 
         checkby, 
         qcheck.id 
       from  qcheck 
       where result = 'fully tested & working' 
       and  date(finishdate) = CURDATE() 
       group by checkby) AS fw 
      on fw.checkby=qcheck.checkby 
left join (
       select count(*) AS faulty, 
         checkby, 
         qcheck.id 
       from  qcheck 
       where result = 'faulty' 
       and  date(finishdate) = CURDATE() 
       group by checkby) AS ff 
      on ff.checkby=qcheck.checkby 
left join (
       select count(*) AS Lasthour, 
         checkby, 
         qcheck.id from qcheck 
       where finishdate >= now() - interval 1 hour 
       group by checkby) AS lh 
      on lh.checkby=qcheck.checkby 
left join (
       select count(*) AS total, 
         checkby, 
         qcheck.id from qcheck 
       where date(finishdate) = CURDATE() 
       group by checkby) AS total 
      on total.checkby=qcheck.checkby 
where   date(finishdate) = CURDATE() 
and    qcheck.checkby not like 'michael' 
and    qcheck.checkby not like 'chaz' 
group by  qcheck.checkby 
order by  total desc 
+0

只需对总计进行第二次查询。 –

+0

是的,我可以正确的另一个查询,但我需要它加入到这个查询生成的表的结尾,所以表动态建立取决于工程师的工作和总数也将在最后一行 – troy

回答

1

首先,你不需要子查询,你可以对一个条件进行计数。

可以将with rollup修饰符添加到group by子句中以包含总计。 order by不能在同一个查询中使用,但可以应用在外部查询中。

此外,通过使用​​3210,您可以用您选择的标签替换该总行的null值。

最后,仍然在最后的总排序行,你可以在order by条款,这将计算为falsetrue中添加is null表达。后者是最后命令。

select coalesce(checkby, 'Total') as checkby_or_total, 
     fully, 
     faulty, 
     lasthour, 
     total 
from (
     select qcheck.checkby, 
       count(case result when 'fully tested & working' then 1 end)  as fully, 
       count(case result when 'faulty' then 1 end)      as faulty, 
       count(case when finishdate >= now()-interval 1 hour then 1 end) as lasthour, 
       count(*) as total 
     from  qcheck 
     where date(finishdate) = CURDATE() 
     and  qcheck.checkby not like 'michael' 
     and  qcheck.checkby not like 'chaz' 
     group by qcheck.checkby with rollup 
     ) as main 
order by checkby is null, 
      total desc 
+0

这是给我每列的结果相同 – troy

+0

对不起,更正了。该条件必须用于'case when'返回值或null。只计算非空值。 – trincot

+0

你是一个神!我怎样才能给最后一行名称总计,因为在工程师名称列最后一行的名称为空的分钟 – troy