sql >> Database >  >> RDS >> Mysql

Hoe krijg ik een percentage van het totaal wanneer de zoekopdracht een GROUP BY heeft?

Voor grote sets kan een JOIN beter presteren dan de subquery.

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  

Voor grote sets, en wanneer een groot percentage van de rijen wordt geretourneerd, kan de JOIN-bewerking meestal beter presteren dan een subquery. In jouw geval is het geen gecorreleerde subquery, dus MySQL zou dat niet meerdere keren moeten uitvoeren, dus het maakt misschien geen verschil.

Opmerking voor niet-fans van COUNT(1) ... we kunnen alle exemplaren van COUNT(1) . vervangen met COUNT(*) of IFNULL(SUM(1),0) om een ​​gelijkwaardig resultaat te bereiken.



  1. Een sorteervolgordekolom gebruiken in een databasetabel

  2. Hoe ververs je het MySQL-configuratiebestand zonder opnieuw op te starten?

  3. Volgnummer toevoegen voor elk element in een groep met behulp van een SQL-query zonder tijdelijke tabellen

  4. Back-up van MySQL-gebruikers