2016-06-18 74 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