【问题标题】:Calculate average session length per daily active user?计算每个每日活跃用户的平均会话时长?
【发布时间】:2020-03-09 00:03:47
【问题描述】:

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

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

SELECT COUNT (DISTINCT user_id) 
FROM table1

【问题讨论】:

  • 您忘记添加表格了 :)。可能想回来编辑。
  • @JohnHumphreys-w00te 抱歉,现在添加!
  • 用您正在使用的数据库标记您的问题。还要定义“每个每日活跃用户的平均会话时长”是什么意思。
  • 提示: 1) 描述为“per”something 的 SQL 查询暗示了 GROUP BY 子句。 --- 2) 要“计算平均值”,您将使用 AVG() 聚合函数。--- 现在尝试编写 SQL 查询。

标签: mysql sql average


【解决方案1】:

欢迎来到 StackOverflow!

现在,你的问题:

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

你已经有了会话时间,使用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)

将每天/每月/每年输出session_length_seconds的平均值

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

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 2021-06-17
    • 2015-09-12
    • 2021-05-09
    • 2021-07-30
    相关资源
    最近更新 更多