Allereerst heb je de subquery's niet nodig, je kunt in plaats daarvan tellen op een voorwaarde.
De with rollup
modifier kan worden toegevoegd aan de group by
clausule om het eindtotaal op te nemen. De order by
kan dan niet in dezelfde zoekopdracht worden gebruikt, maar kan worden toegepast in een buitenste zoekopdracht.
Bovendien, met het gebruik van coalesce
je kunt de null
. vervangen waarde voor die totale rij met het label van uw keuze.
Ten slotte, om de totale rij aan het einde nog steeds te sorteren, kunt u een is null
toevoegen uitdrukking in de order by
clausule, die zal evalueren tot false
of true
. De laatste wordt als laatste besteld.
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