BigQuery标准SQL:如何筛选过去3个月游玩满10天的游戏高收入用户
BigQuery SQL 解决方案
首先明确前提:假设你已有存储用户游玩行为的表my-database.Gameplay_events,核心字段包含user_id(对应用户ID)、play_time(游玩行为的时间戳/日期字段)。
原有代码问题修正
你原有代码存在两处不符合需求的问题:
ORDER BY total_rev ASC会返回收入最低的10位用户,需改为DESC取收入最高的用户- 未限定IAP收入的统计范围为过去3个月,需补充时间过滤条件
完整实现代码
SELECT users.user_id, SUM(pay.amount) AS total_rev FROM `my-database.User` AS users INNER JOIN `my-database.IAP_events` AS pay ON users.user_id = pay.user_id INNER JOIN `my-database.Games` AS games ON users.game_id = games.game_id -- 关联筛选符合游玩天数要求的用户 INNER JOIN ( SELECT user_id FROM `my-database.Gameplay_events` WHERE -- 限定统计过去3个月的游玩记录 DATE(play_time) >= DATE_SUB(CURRENT_DATE(), INTERVAL 3 MONTH) GROUP BY user_id -- 筛选不同游玩日期≥10天的用户 HAVING COUNT(DISTINCT DATE(play_time)) >= 10 ) AS valid_users ON users.user_id = valid_users.user_id WHERE games.game_name = "Love" -- 限定IAP收入统计范围为过去3个月 AND DATE(pay.pay_time) >= DATE_SUB(CURRENT_DATE(), INTERVAL 3 MONTH) GROUP BY users.user_id ORDER BY total_rev DESC LIMIT 10
逻辑说明
- 子查询
valid_users先完成游玩天数统计:筛选过去3个月的游玩记录,按用户ID分组后,统计去重的游玩日期数量,仅保留≥10天的用户ID - 主查询通过内连接关联
valid_users,自动过滤掉不符合游玩天数要求的用户 - 补充了IAP收入的时间过滤,确保统计的是过去3个月的收入数据
- 如果你的时间字段本身就是DATE类型,可去掉
DATE()转换函数直接比对
备注:如果游玩记录表同时包含多游戏数据,可在子查询
valid_users中额外关联Games表筛选game_name = "Love",或直接增加game_id过滤条件,确保统计的是《Love》游戏内的游玩天数。
内容的提问来源于stack exchange,提问作者MatmataHi
相关产品推荐
相关产品推荐

