For store sæt kan en JOIN fungere bedre end underforespørgslen.
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
For store sæt, og når en stor procentdel af rækkerne returneres, kan JOIN-operationen normalt overgå en underforespørgsel. I dit tilfælde er det ikke en korreleret underforespørgsel, så MySQL burde ikke skulle udføre det flere gange, så det gør måske ikke nogen forskel.
Bemærkning til ikke-fans af COUNT(1)
... vi kunne erstatte enhver og alle forekomster af COUNT(1)
med COUNT(*)
eller IFNULL(SUM(1),0)
at opnå tilsvarende resultat.