准备数据
CREATE TABLE Activity (
player_id INT NOT NULL,
device_id INT NOT NULL,
event_date DATE NOT NULL,
games_played INT NOT NULL,
PRIMARY KEY (player_id, event_date)
);

解题思路
首先要查询一共有多少不重复的游戏id
SELECT COUNT(DISTINCT player_id) FROM activity
去重统计查询
然后再查询一周内至少再有一次游玩的玩家数
SELECT player_id
FROM activity
WHERE event_Date <= DATE_ADD((SELECT MIN(event_Date) FROM activity), INTERVAL 7 DAY)
GROUP BY player_id
HAVING COUNT(*) >= 2
然后再计算比例
完成代码:
SELECT ROUND(count(*) / (SELECT COUNT(DISTINCT player_id) FROM activity), 9) AS fraction
FROM (
SELECT player_id
FROM activity
WHERE event_Date <= DATE_ADD((SELECT MIN(event_Date) FROM activity), INTERVAL 7 DAY)
GROUP BY player_id
HAVING COUNT(*) >= 2
) AS Subquery;
执行过程中发现小数点保留两位居然结果为0,开始我以为我统计错误呢。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




