sql >> Base de Datos >  >> RDS >> Mysql

Consulta de totalización en la última fila

En primer lugar, no necesita las subconsultas, en su lugar puede hacer un recuento de una condición.

El with rollup el modificador se puede agregar al group by cláusula para incluir el total general. El order by no se puede usar en la misma consulta entonces, pero se puede aplicar en una consulta externa.

Además, con el uso de coalesce puede reemplazar el null valor para esa fila total con la etiqueta de su elección.

Finalmente, para ordenar la fila total al final, puede agregar un is null expresión en el order by cláusula, que se evaluará como false o true . Este último se ordena en último lugar.

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