这道题目要求我们计算每个用户在最近时间内的访问积分。我们要做的事情如下:

1. 确定总体问题

我们需要计算每个用户的访问积分,并按积分降序排序。积分的计算公式是:每访问10分钟获得1积分。

2. 分析关键问题

  • 计算访问时长:使用TIMESTAMPDIFF函数计算每次访问的时长(以分钟为单位)。
  • 计算积分:将访问时长除以10,使用FLOOR函数取整,计算每次访问的积分。
  • 汇总积分:对每个用户的积分进行汇总。
  • 排序输出:按积分降序排序。

3. 解决每个关键问题的代码及讲解

步骤1:计算访问时长

我们使用TIMESTAMPDIFF函数计算每次访问的时长(以分钟为单位):

TIMESTAMPDIFF(MINUTE, visit_time, leave_time)
  • TIMESTAMPDIFF(MINUTE, visit_time, leave_time):计算离开时间与访问时间之间的分钟差。
步骤2:计算积分

将访问时长除以10,使用FLOOR函数取整,计算每次访问的积分:

FLOOR(TIMESTAMPDIFF(MINUTE, visit_time, leave_time)/10)
  • FLOOR(.../10):将访问时长除以10,取整计算积分。
步骤3:汇总积分

对每个用户的积分进行汇总:

SUM(FLOOR(TIMESTAMPDIFF(MINUTE, visit_time, leave_time)/10)) AS point
  • SUM(...) AS point:对每个用户的积分进行汇总,计算总积分。
步骤4:排序输出

我们使用ORDER BY按积分降序排序输出结果:

ORDER BY 
    point DESC

完整代码

SELECT 
    user_id,
    SUM(FLOOR(TIMESTAMPDIFF(MINUTE, visit_time, leave_time)/10)) AS point
FROM 
    visit_tb
GROUP BY 
    user_id
ORDER BY 
    point DESC;