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.