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

Comment obtenir un pourcentage du total lorsque la requête a un GROUP BY ?

Pour les grands ensembles, un JOIN peut être plus performant que la sous-requête.

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  

Pour les ensembles volumineux et lorsqu'un grand pourcentage de lignes est renvoyé, l'opération JOIN peut généralement surpasser une sous-requête. Dans votre cas, ce n'est pas une sous-requête corrélée, donc MySQL ne devrait pas avoir à l'exécuter plusieurs fois, donc cela ne fera peut-être aucune différence.

Remarque pour les non-fans de COUNT(1) ... nous pourrions remplacer toutes les occurrences de COUNT(1) avec COUNT(*) ou IFNULL(SUM(1),0) pour obtenir un résultat équivalent.