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

Como obter uma porcentagem do total quando a consulta possui um GROUP BY?


Para conjuntos grandes, um JOIN pode ter um desempenho melhor que a subconsulta.
SELECT ma.actor
     , COUNT(1) AS total
     , COUNT(1) / t.cnt * 100 AS `percentage`
  FROM movies_actors ma
 CROSS
  JOIN (SELECT COUNT(1) AS cnt FROM movies_actors) t
 GROUP
    BY ma.actor
     , t.cnt  

Para conjuntos grandes e quando uma grande porcentagem das linhas está sendo retornada, a operação JOIN geralmente pode superar uma subconsulta. No seu caso, não é uma subconsulta correlacionada, então o MySQL não deve executar isso várias vezes, então pode não fazer diferença.

Nota para não fãs de COUNT(1) ... poderíamos substituir toda e qualquer ocorrência de COUNT(1) com COUNT(*) ou IFNULL(SUM(1),0) para obter resultado equivalente.