Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête de totalisation dans la dernière ligne

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