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)
获得同等的结果。