За големи набори JOIN може да работи по-добре от подзаявката.
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
За големи набори и когато се връща голям процент от редовете, операцията JOIN обикновено може да превъзхожда подзаявката. Във вашия случай това не е свързана подзаявка, така че MySQL не трябва да я изпълнява няколко пъти, така че може да няма никаква разлика.
Бележка за нелюбителите на COUNT(1)
... бихме могли да заменим всички и всички поява на COUNT(1)
с COUNT(*)
или IFNULL(SUM(1),0)
за постигане на еквивалентен резултат.