sql >> Databasteknik >  >> RDS >> Mysql

Hur får man en procentandel av totalen när frågan har en GROUP BY?

För stora uppsättningar kan en JOIN fungera bättre än underfrågan.

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  

För stora uppsättningar, och när en stor andel av raderna returneras, kan JOIN-operationen vanligtvis överträffa en underfråga. I ditt fall är det inte en korrelerad underfråga, så MySQL ska inte behöva köras flera gånger, så det kanske inte gör någon skillnad.

Anmärkning till icke-fans av COUNT(1) ... vi kan ersätta alla förekomster av COUNT(1) med COUNT(*) eller IFNULL(SUM(1),0) för att uppnå likvärdigt resultat.



  1. Hitta antalet tomma eller NULL kolumner i en MySQL-tabell

  2. PostgreSQL v13 distribution och skalning med ClusterControl 1.8.2

  3. Julen kommer tidigt (Oracle 12.2)

  4. Hur man kör PHP-skriptet vid schemalagd tid