我有一个如下的用户表;
Column Name Column Datatype Column Description
user_id varchar Unique user id
reg_ts timestamp Registration date
reg_device varchar Device registered
reg_attribution varchar Acquisition type
[我试图找到“通常情况下,每笔交易中有多少注册人来源?“
我写了下面的代码,但不确定如何除以记录总数:
select reg_ts as registiration_date,
reg_attribution as acquisition_type,
count(*)
from users
group by 1,2
order by 1 asc
运行上面的代码后,我只获得每个日期的每种采集类型的计数。但是我需要找到每种收购类型的注册人份额。您能帮我解决我的问题吗?
您可以使用相关的子查询来获取一天的计数(假设reg_ts
尽管是timestamp
,但仍是一天)。
SELECT u1.reg_ts AS registiration_date,
u1.reg_attribution AS acquisition_type,
count(*) / (SELECT count(*)
FROM users u2
WHERE u2.reg_ts = u1.reg_ts) AS share
FROM users u1
GROUP BY u1.reg_ts,
u1.reg_attribution
ORDER BY u1.reg_ts ASC;
编辑:
如果要获得相对于用户总数而不是当天注册用户的比率,只需从子查询中删除WHERE
子句。
SELECT u1.reg_ts AS registiration_date,
u1.reg_attribution AS acquisition_type,
count(*) / (SELECT count(*)
FROM users u2) AS share
FROM users u1
GROUP BY u1.reg_ts,
u1.reg_attribution
ORDER BY u1.reg_ts ASC;
使用窗口功能:
select reg_ts as registiration_date,
reg_attribution as acquisition_type,
count(*) / sum(count(*)) over () as ratio
from users
group by 1, 2
order by 1 asc;
这些已在MySQL 8.0版中提供。