Mysql 获取列总数和分组总数

Mysql 获取列总数和分组总数,mysql,sql,join,group-by,aggregate-functions,Mysql,Sql,Join,Group By,Aggregate Functions,在SQL中,我想从每个用户那里获得网站点击率的百分比。为此,我需要获取列站点点击次数的总和,但我的查询在另一列上使用了GROUP By 除了GROUP BY中的每个用户id之外,如何获得整个列的总和 数据集: User Page Hits Page ---- --------- ---- a 10 home a 10 profile b 8 home b 2

在SQL中,我想从每个用户那里获得网站点击率的百分比。为此,我需要获取列
站点点击次数的总和,但我的查询在另一列上使用了GROUP By

除了GROUP BY中的每个用户id之外,如何获得整个列的总和

数据集:

User    Page Hits    Page
----    ---------    ----
a       10           home
a       10           profile
b       8            home
b       2            profile
c       6            home
c       4            profile
结果:

User     Site Hits      pct of total site hits
----     ---------      ---------------
a        20             50%
b        10             25%
c        10             25%
查询:

SELECT
user,
SUM(page_hits) AS site_hits,
SUM(page_hits) / total_page_hits <-- How do I get sum of 'page hits' for total_page_hits ????
FROM hit_data
GROUP BY user
选择
用户,
与站点点击次数之和(页面点击次数),

总和(页面点击数)/总页面点击数一个选项:使用子查询

SELECT
user,
SUM(page_hits) AS site_hits,
SUM(page_hits) / (select sum(page_hits) from hit_data) 
FROM hit_data
GROUP BY user

除非您在子查询中选择总点击数作为子查询中的一列,否则您需要将其作为两个查询来执行。

这可能有效,而且比看起来更合理:

SELECT user, SUM(page_hits) AS site_hits,
       SUM(page_hits) / (select sum(page_hits) from hit_data)
FROM hit_data
GROUP BY user

由于子查询与记录不相关,数据库引擎可以首先运行子查询,然后在外部查询中将其作为常量使用。

是否可以按显示方式使用子查询?我认为子查询必须是FROM或JOIN语句的一部分?是的,正如我所提到的,这是正确的方法。子查询可以在JOIN/WHERE或SELECT as列中使用。不,它可以用于返回查询中几乎任何位置的标量。这比在FROM或JOIN子句中使用它效率低吗?不,它非常有效。优化器将只运行该子查询一次,然后将该值用于所有其余数据。性能将与将该值连接到主查询中的性能相同。连接的问题是,在分组之前增加行数,然后影响页面点击总数。