这个题就是考察对日期函数的应用情况,及思路。

重点:求出每周的周一是哪天,并填充到列表中

在多次尝试和思考后,意识到比较简单的答案

利用weekday算出每天是当周的第几天,然后使用login_date减去这个天数就可以得到当周的第一天

DATE_SUB(login_date, interval weekday(login_date) day)

这个思路一旦建立,这个题就很简单了。

select
  week_begin,
  round(count(*) / count(DISTINCT uid), 2) as avg_times
from
(
    select
      uid,
      DATE_SUB(login_date, interval weekday(login_date) day) as week_begin
    from
      user_login_tb
  ) t
group by
  week_begin
order by
  week_begin