当查询具有GROUP BY时,如何获得总计的百分比?
假设我有一个非标准化的表格,其中包含电影演员姓名和他们所去过的电影。
CREATE TABLE movies_actors ( movies_actors_id INT,
movie VARCHAR(255),
actor VARCHAR(255),
PRIMARY KEY (movies_actors_id)
);
我要做的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;
但这似乎… idk …令人讨厌。
有任何想法吗?
回答:
对于大型集合,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)
获得同等的结果。
以上是 当查询具有GROUP BY时,如何获得总计的百分比? 的全部内容, 来源链接: utcz.com/qa/426837.html