如何在查询具有GROUP BY时获得总数的百分比?

neu*_*ert 16 mysql sql

假设我有一个非规范化的表格,其中包含电影演员名称和他们所在的电影.

CREATE TABLE movies_actors (
  movies_actors_id INT,
  movie VARCHAR(255),
  actor VARCHAR(255),
  PRIMARY KEY (movies_actors_id)
);
Run Code Online (Sandbox Code Playgroud)

我这样做是SELECT actor, COUNT(1) FROM movies_actors GROUP BY actor为了找出这位演员有多少部电影.但我也想知道演员的电影比例是多少.

我想我能做到这一点:

SELECT
  actor,
  COUNT(1) AS total,
  COUNT(1) / (SELECT COUNT(1) FROM movies_actors) * 100 AS avg
FROM movies_actors
GROUP BY actor;
Run Code Online (Sandbox Code Playgroud)

但这似乎......呃...很难过.

有任何想法吗?

spe*_*593 24

对于大型集合,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  
Run Code Online (Sandbox Code Playgroud)

对于大型集,并且当返回大部分行时,JOIN操作通常可以胜过子查询.在你的情况下,它不是一个相关的子查询,所以MySQL不应该多次执行,所以它可能没有任何区别.