问题描述
我有一张简单的桌子
浏览器 | 浏览量 |
---|---|
野生动物园 | 7.1875 |
即 | 1.935 |
firefix | 1.3445 |
野生动物园 | 2.03 |
我正在尝试计算每个浏览器的页面浏览量占总浏览量(以百万计)的百分比。
with total as
( select sum(pageviews) as total
from pageviews )
select browser,pageviews / total.total as share
from pageviews,total
但我收到此错误:
您的 sql 语法有错误;检查手册 对应于您的 MysqL 服务器版本以使用正确的语法 接近 'total as ( select sum(pageviews) as total
关于如何计算百分比的任何建议? 谢谢!
解决方法
select browser,pageview,pageview / SUM(pageview) OVER () as share
from pageviews
对于 MySQL 5.x 使用
select browser,pageview / total.total as share
from pageviews
CROSS JOIN ( select sum(pageview) as total
from pageviews ) total
https://dbfiddle.uk/?rdbms=mysql_8.0&rdbms2=mysql_5.7&fiddle=6c188ab43ec7a81495630bcc266f46bd
,如果您使用的是旧版 MySQL,则:
查询:
select browser,pageviews / total.total as share
from pageviews,( select sum(pageviews) as total
from pageviews )total
输出:
浏览器 | 分享 |
---|---|
safari | 0.575138039579793 |
即 | 0.15483715807683296 |
firefix | 0.10758581745403162 |
safari | 0.1624389848893424 |
dbfiddle here
如果您使用的是 MySQL 8,那么您可以使用窗口函数:
select browser,pageviews / sum(pageviews)over(partition by (select 1)) as share from pageviews
DB-Fiddle 链接:
create table pageviews (browser varchar(20),pageviews float);
insert into pageviews values('safari',7.1875);
insert into pageviews values('ie',1.935);
insert into pageviews values('firefix',1.3445);
insert into pageviews values('safari',2.03);
with total as
( select sum(pageviews) as total
from pageviews )
select browser,total
浏览器 | 分享 |
---|---|
safari | 0.575138039579793 |
即 | 0.15483715807683296 |
firefix | 0.10758581745403162 |
safari | 0.1624389848893424 |
select browser,pageviews / sum(pageviews)over(partition by (select 1)) as share from pageviews
浏览器 | 分享 |
---|---|
safari | 0.575138039579793 |
即 | 0.15483715807683296 |
firefix | 0.10758581745403162 |
safari | 0.1624389848893424 |
dbfiddle here
强调文字
,更改您的查询以使用正确的字段名称(您使用 pageviews
作为列名称,但此列的名称是 pageview
?):
with total as
( select sum(pageview) as total
from pageviews )
select browser,pageview / total.total as share
from pageviews,total