当前位置: 首页 > 面试题库 >

当查询具有GROUP BY时,如何获得总计的百分比?

壤驷穆冉
2023-03-14
问题内容

假设我有一个非标准化的表格,其中包含电影演员姓名和他们所去过的电影。

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



 类似资料:
  • 问题内容: 我有以下查询,其结果对我来说是非常意外的: 它为所有行返回100。应该不同吗? 问题答案: 等于您的情况。 尝试这样的事情: update :甚至用ratio_to_report更简单

  • 这显然很简单,但作为一个新手,我被卡住了。 我有一个CSV文件,其中包含3列:州、办公室ID和该办公室的销售额。 我想计算给定州每个办公室的销售额百分比(每个州所有百分比的总和为100%)。 这返回: 我似乎不知道如何“达到”级别,以总计整个的来计算分数。

  • 问题内容: 这显然很简单,但是作为一个笨拙的新手,我陷入了困境。 我有一个包含3列的CSV文件,分别是该办公室的州,办公室ID和销售。 我想计算给定状态下每个办公室的销售百分比(每个州的所有百分比的总和为100%)。 返回: 我似乎无法弄清楚如何“高达”的水平与总起来对整个计算分数。 问题答案: 你将不得不创建第二个对象,但是你可以以一种更简单的方式来计算百分比-仅计算并将该列除以其和即可。复制P

  • 问题内容: 下面我有一个查询,将从用户代理表和IP地址链接表中获取网站的最常见用户代理: 有时它会告诉我一些类似的东西 我的问题是,是否有一种方法可以使既然左侧的数字代表一个整体的百分比,并且会随着时间而增长,那么我能否使用sql语句的一部分来显示每个组在整体中的百分比?这样一来,我可以不使用而做一些事情,说获得总行数的百分比,而不仅仅是行数? 问题答案: 是的你可以: 我删除了,因为它似乎没有意

  • 问题内容: 我有这样的查询: 上述查询^中的结果数为10行。现在,我想知道如何在此查询中获取总结果数: 如何计算此^中所有结果的数量 (与无关)? 其实我想要这个数字: 现在,我想知道如何在没有其他查询的情况下获得总结果数。 问题答案: 添加一列,例如: 如 @Tim Biegeleisen所述 : 关键字在所有其他内容之后应用,因此仍然返回正确的答案。

  • 问题内容: 我正在使用SQL Server 2008。 我想编写一个查询,该查询可以让我在给定的几天内进行全部活动。具体来说,我想计算过去7天每天的总票数。 我的桌子看起来像这样: 我需要我的结果看起来像这样 我的想法是我必须做这样的事情: 该查询不起作用,因为它仅计算(几乎完全相同)同时发生的选票。当然,我只想看特定的一天。我如何做到这一点? 问题答案: 将其投射为: 您的专栏是,但您只需要其中