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

¿Cómo obtener un porcentaje del total cuando la consulta tiene un GRUPO POR?

Para conjuntos grandes, un JOIN puede funcionar mejor que la 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, y cuando se devuelve un gran porcentaje de las filas, la operación JOIN normalmente puede superar a una subconsulta. En su caso, no es una subconsulta correlacionada, por lo que MySQL no debería tener que ejecutarla varias veces, por lo que es posible que no haga ninguna diferencia.

Nota para los no fans de COUNT(1) ... podríamos reemplazar cualquiera y todas las apariciones de COUNT(1) con COUNT(*) o IFNULL(SUM(1),0) para lograr un resultado equivalente.