Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erhalte ich einen Prozentsatz der Gesamtsumme, wenn die Abfrage ein GROUP BY hat?

Bei großen Mengen kann ein JOIN besser abschneiden als die Unterabfrage.

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  

Bei großen Mengen und wenn ein großer Prozentsatz der Zeilen zurückgegeben wird, kann die JOIN-Operation normalerweise eine Unterabfrage übertreffen. In Ihrem Fall handelt es sich nicht um eine korrelierte Unterabfrage, daher sollte MySQL diese nicht mehrmals ausführen müssen, sodass dies möglicherweise keinen Unterschied macht.

Hinweis für Nicht-Fans von COUNT(1) ... wir könnten alle Vorkommen von COUNT(1) ersetzen mit COUNT(*) oder IFNULL(SUM(1),0) um ein gleichwertiges Ergebnis zu erzielen.