SQL如何在一个典型的日期从每个类别中查找平均用户

问题描述 投票:-1回答:2

我有一个如下的用户表;

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

运行上面的代码后,我只获得每个日期的每种采集类型的计数。但是我需要找到每种收购类型的注册人份额。您能帮我解决我的问题吗?

mysql sql
2个回答
2
投票

您可以使用相关的子查询来获取一天的计数(假设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;

0
投票

使用窗口功能:

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版中提供。

© www.soinside.com 2019 - 2024. All rights reserved.