开发者

Mysql如何查询近30天活跃用户数

目录
  • 思路:
  • 解题过程:
    • 踩了个坑:
  • Code
    • 踩坑了

      思路:

      题目要求:统计截至 2019-07-27(包含2019-07-27),近 30android 天的每日活跃用户数(当天只要http://www.devze.com有一条活动记录,即为活跃用户)

      要计算日期之间的天数,这时就需要用到DATEDIFF函数

      DATEDIFF(date1,date2):返回date1 - date2的日期间隔天数

      把在时间要求内的筛选出来,再进行 用户id 分组,最后统计用户个数(去重后的)

      解题过程:

      先对日期进行筛选

      SELECT *
      FROM activity
      WHERE DATEDIFF('2019-07www.devze.com-27',activity_date) BETWEEN 0 AND 29

      Mysql如何查询近30天活跃用户数

      然后再日期进行分组,计算用户id,这时需要对用户id进行去重,若不去重,则会出现以下结果

      SELECT activity_date, COUNT(user_id)
      FROM activity
      WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
      GROUP BY activity_date 

      Mysql如何查询近30天活跃用户数

      所以需要对用户id进UeqasRETs行去重处理(COUNT(DISTINCT user_id)保证每个用户不相同(或者说重复出现)

      踩了个坑:

      WHERE DATEDIFFandroid('2019-07-27',activity_date) BETWEEN 0 AND 29
      GROUP BY activity_date

      GROUP BY activity_date
      HAVING DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29

      提出问题,这两个mysql语句都可以执行成功,但两者一点问题都没有嘛?

      一个先过滤后分组,另一个先分组后过滤。按理说没毛病啊

      但是结果却是:

      • 第一个查询是正确的,因为它使用WHERE子句来过滤日期范围,然后使用GROUP BY和COUNT(DISTINCT user_id)来统计每日活跃用户数。
      • 第二个查询错误地将日期范围过滤放在了HAVING子句中,而没有使用聚合函数,这不符合SQL语法。
      • 正确的做法是在WHERE子句中指定日期范围过滤条件,然后使用GROUP BY进行分组统计。

      注意:HAVING子句不能独立于聚合函数使用来过滤原始数据

      更多关于聚合函数的要点可以查看MySQL零散拾遗(四)借这个案例把里面的要点进行更进一步的阐述说明。

      Code

      踩坑了

      SELECT activity_date day, COUNT(DISTINCT user_id) active_users 
      FROM activity
      WHERE DATEDIFF('2019-07-27',activity_date) BETWEEN 0 AND 29
      GROUP BY activity_date 

      到此这篇关于Mysql查询近30天活跃用户数的文章就介绍到这了,更多相关Mysql查询活跃用户数内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新数据库

      数据库排行榜