Tout d'abord, vous n'avez pas besoin des sous-requêtes, vous pouvez plutôt compter sur une condition.
Le with rollup
le modificateur peut être ajouté au group by
clause pour inclure le grand total. Le order by
ne peut alors pas être utilisé dans la même requête, mais peut être appliqué dans une requête externe.
De plus, avec l'utilisation de coalesce
vous pouvez remplacer le null
valeur pour cette ligne totale avec l'étiquette de votre choix.
Enfin, pour toujours trier la ligne totale à la fin, vous pouvez ajouter un is null
expression dans le order by
clause, qui sera évaluée à false
ou true
. Ce dernier est commandé en dernier.
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