假设我有一个非标准化的表格,其中包含电影演员姓名和他们所去过的电影。
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天每天的总票数。 我的桌子看起来像这样: 我需要我的结果看起来像这样 我的想法是我必须做这样的事情: 该查询不起作用,因为它仅计算(几乎完全相同)同时发生的选票。当然,我只想看特定的一天。我如何做到这一点? 问题答案: 将其投射为: 您的专栏是,但您只需要其中