选择在 30 天内每周至少玩 2 次或更多时间的唯一用户。 (SQL/BigQuery)

Posted

技术标签:

【中文标题】选择在 30 天内每周至少玩 2 次或更多时间的唯一用户。 (SQL/BigQuery)【英文标题】:Select Unique Users who played the game at least 2 or more time per week in 30 days. (SQL/BigQuery) 【发布时间】:2020-07-13 14:34:30 【问题描述】:

我有一个用户玩多个游戏 6 个月的数据

我有表名:App_Click 列名:- user_id日期(用户点击游戏的日期),app_nameApp_click(每个用户的总点击次数)

如果条目存在而不是用户点击了应用程序(即播放)

问题:我正在寻找在 30 天内或每季度每周至少玩 2 次或更多次游戏 ABC 的唯一用户

寻找类似的解决方案:玩过 ABC 的用户总数:100(也玩过其他游戏的用户) 只玩过ABC的用户总数:30(仅限只玩过ABC的用户) 玩过ABC等游戏的用户总数:70(玩过ABC其他游戏的用户)

【问题讨论】:

为了能够正确回答您还可以添加信息,无论您使用的是传统 SQL 数据库还是其他数据库。并且还向我们展示了一些你迄今为止尝试过的例子(比如一些 SQL 选择)编辑:哦,我看到了 SQL 标记 它的大查询感谢您指出它会记住这一点以供将来参考。 为我们提供输入数据和预期输出的示例将提高您获得正确答案的机会 - 请参阅 How to create a Minimal, Reproducible Example 如何考虑周数?确切的几周或任何 7 天的时间段?玩家需要在给定月份的所有周内每周玩两次以上,还是只玩一周就足够了? 玩家每周至少玩过 2 次或更多次让我们假设单个玩家玩 week1 玩了 2(clicks), week2 5 , week3 6 等等 【参考方案1】:

您可以使用两个级别的聚合:

select countif(num_abc > 0) as num_abc_users,
       countif(num_abc > 0 and num_other = 0) as num_abc_only,
       countif(num_abc > 0 and num_other > 0) as num_abc_plus_other 
from (select user_id, countif(app_name = 'ABC') as num_abc, countif(app_name <> 'ABC') then num_other
      from t
      group by user_id
     ) t;

子查询汇总每个用户。然后外部聚合这些结果。

【讨论】:

抱歉指出,但您在 30 天内每周至少没有使用过 2 次或更多次

以上是关于选择在 30 天内每周至少玩 2 次或更多时间的唯一用户。 (SQL/BigQuery)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?

谈一谈|数据分析-30天内阅读数据的分析结果

每周出勤总结一次

Java - 尝试写入文件 2 次或更多次时出现 BufferOverflowException

如何从30天内选择数据?

shell删除文件夹脚本怎么写?,保留2天内的文件夹,2天以前的是直接删除,每周二、四、六删一次