Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Totalizando consulta na última linha


Em primeiro lugar, você não precisa das subconsultas, você pode fazer uma contagem em uma condição.

O with rollup modificador pode ser adicionado ao group by cláusula para incluir o total geral. O order by não pode ser usado na mesma consulta, mas pode ser aplicado em uma consulta externa.

Além disso, com o uso de coalesce você pode substituir o null valor para essa linha total com o rótulo de sua escolha.

Por fim, para ainda classificar a linha total no final, você pode adicionar um is null expressão no order by cláusula, que será avaliada como false ou true . Este último é pedido por último.
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