假设我有一个非规范化的表格,其中包含电影演员名称和他们所在的电影.
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不应该多次执行,所以它可能没有任何区别.