这道题目要求我们计算每个用户在最近时间内的访问积分。我们要做的事情如下:
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;