当查询具有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

回到顶部