这道题是编写SQL,报告在首次登录的第二天再次登录的玩家的分数,四舍五入到小数点后两位。
首先思路很流畅,
- 用复表找出第二天也登陆的player_id
- 两个统计量相除即可
- 最后四舍五入
但是我漏了最重要的一点首次,最后还要加一个过滤条件
SELECT ROUND(COUNT(DISTINCT a1.player_id) / (SELECT COUNT(DISTINCT player_id) FROM Activity), 2) AS fraction
FROM Activity AS a1,
Activity AS a2
WHERE a1.player_id = a2.player_id
AND DATEDIFF(a1.event_date, a2.event_date) = -1
AND (a1.player_id, a1.event_date) IN
(
SELECT player_id, MIN(event_date)
FROM Activity
GROUP BY player_id
)
记得要两个主键一起in