拼多多面试题解析:找出连续N次得分球员

需积分: 5 1 下载量 7 浏览量 更新于2024-08-03 收藏 284KB DOCX 举报
"这是一份关于面试题目的资料,涵盖了拼多多和腾讯两家公司的面试问题,主要涉及SQL查询技能。题目要求找出在比赛中连续N次得分的球员和计算用户连续签到的最大天数。" 在这两个面试问题中,我们首先关注的是拼多多的面试题,它要求找出在比赛中连续三次或以上为球队得分的球员名单。这个问题可以通过SQL解决,我们可以使用自连接或者窗口函数来实现。以下是可能的解决方案: 1.4.1 方案一:自连接法 我们可以将得分表自连接,通过比较当前球员与前一球员的得分时间和球员编号,来判断得分是否连续。如果连续,就累加计数,当计数达到3次时,记录该球员信息。 1.4.2 方案二:窗口函数法 使用窗口函数LEAD()或LAG(),可以获取当前行的下一个或上一个得分情况,结合ROW_NUMBER()等函数,同样可以实现连续得分的统计。 接下来是腾讯面试题,问题是计算每个用户历史以来的最大连续签到天数。这个问题可以通过计算连续签到的最长子序列来解决,可以使用SQL中的自连接和聚合函数配合CASE WHEN语句来完成。以下是一种可能的实现: ```sql SELECT fuser_id, MAX(consecutive_days) AS fmax_days FROM ( SELECT fuser_id, COUNT(*) AS consecutive_days FROM ( SELECT fuser_id, fdate, CASE WHEN fis_sign_in = 1 AND (fdate - LAG(fdate, 1, fdate) OVER (PARTITION BY fuser_id ORDER BY fdate)) = 1 THEN 1 ELSE 0 END AS is_consecutive FROM t_user_attendence ) subquery GROUP BY fuser_id, fis_sign_in HAVING SUM(is_consecutive) > 0 ) max_days_subquery GROUP BY fuser_id; ``` 这个查询首先找出每个用户的连续签到记录,然后计算每个连续签到序列的长度,最后选取每个用户的最长连续签到天数。 这两个问题都体现了SQL在数据分析中的强大能力,特别是处理时间序列数据和连续性问题时,需要灵活运用窗口函数、自连接等高级特性。对于求职者来说,熟练掌握这些技能对于在面试中脱颖而出至关重要。