select round(
(
select count(distinct a.player_id)
from Activity as a inner join Activity as b
on a.player_id = b.player_id and DateDiff(a.event_date, b.event_date) = 1 and b.event_date = (
select min(event_date)
from Activity
where player_id = b.player_id
)
)
/
(
select count(distinct player_id)
from Activity
)
, 2) as fraction
这题是真的恶心,需要注意的点就是select count外面必须得加个括号
第二点是如果用where联查,是创建笛卡尔积,比inner join效率慢

这篇博客探讨了一个复杂的SQL查询,涉及了活动表的内连接和子查询,用于计算连续两天参与活动的玩家比例。作者强调了在使用子查询和联接时注意效率问题,特别是避免笛卡尔积的产生,因为这可能导致显著的性能下降。文章还提醒在某些情况下,外层的SELECT计数操作需要额外的括号来确保正确性。
315

被折叠的 条评论
为什么被折叠?



