暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

阿里云sql挑战赛第二题解题思路及答案

原创 寒冰 2023-06-17
257

准备数据

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论