题解 | 统计自然周平均登录次数情况
统计自然周平均登录次数情况
https://www.nowcoder.com/practice/4655e5dfa8f64166875d6f77558a1fc8
SELECT
DATE_SUB(login_date , INTERVAL WEEKDAY(login_date) DAY ) as week_begin,
ROUND(COUNT(id) / COUNT(DISTINCT(uid)),2) as avg_times
FROM user_login_tb
GROUP BY week_begin
ORDER BY week_begin;
题目需要对自然周进行分组→每组组名是每周周一:
- 第一步,计算日期到周一的偏移天数,weekday() 返回指定日期的‘周内索引值’:周一→返回0;
- 第二步,日期回退到周一,date_sub(xx,INTERVAL 偏移天数,DAY) 将指定日期 - 指定时长;
- 最终效果:无论是一周中的那一天,统统变成该周周一,作为分组的条件;
统计每周的平均登录次数:每周登录次数/每周登录人数:
- 登录次数:COUNT;
- 登录人数:COUNT(DISTINCT ())