计算每个每日活跃用户的平均会话长度?

Calculate average session length per daily active user?

我是 SQL 的新手,我正在努力解决我练习中的一个问题。我将如何计算每个每日活跃用户的平均会话长度?显示的 table 只是扩展 table 的示例。想象一下加载更多行。

我只是用这个查询来计算每日活跃用户:

SELECT COUNT (DISTINCT user_id) 
FROM table1

欢迎来到 Whosebug!

现在,你的问题:

How would I calculate average session length per daily active user?

您已经有了会话时间,使用 AVG 函数您将得到所有

的简单平均值
select AVG(session_length_seconds) avg from table_1

但是你想要每天...所以你需要按天来思考,那么你是如何得到这一天的呢?你有一个 activity_date 作为日期条目,很容易从中提取日、月和年,例如

select
    DAY(activity_date) day,
    MONTH((activity_date) month,
    YEAR(activity_date) year
from
    table_1

将在您可以使用的列中分解日期字段...

现在,回到你的问题,它指出 每日活跃用户 ,但你所拥有的只是会话,一个用户可以有多个会话,所以我不知道,从你分享的上下文,你是如何处理的,并为每个会话制作平均值,作为要检索的数据没有意义,我只是假设,并提供这个答案只是为了让你开始,你想要 仅平均每天

了解如何获得平均值后,让我们创建一个包含所有这些的查询:

select 
    DAY(activity_date) day, 
    MONTH((activity_date) month, 
    YEAR(activity_date) year,
    AVG(session_length_seconds) avg 
from 
    table_1
group by
    DAY(activity_date), 
    MONTH((activity_date), 
    YEAR(activity_date)

将输出每个 day/month/year

session_length_seconds 的平均值

group by 部分,您需要在 select 中拥有尽可能多的字段,但不进行任何计算,例如 sumcount,等等...在我们的例子中 avg 进行计算,所以我们不想按该值分组,但我们确实想按其他 3 个值分组,所以我们有 3 列,分别是日、月和年。如果您愿意,也可以使用 concat 将日、月和年连接成一个字符串...