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

 更新时间:2024年08月01日 10:33:32   作者:@See you later  
这篇文章主要介绍了Mysql查询近30天活跃用户数,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

思路:

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

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

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

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

解题过程:

先对日期进行筛选

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

然后再日期进行分组,计算用户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 

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

踩了个坑:

WHERE DATEDIFF('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查询活跃用户数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 5.7 版本的安装及简单使用(图文教程)

    MySQL 5.7 版本的安装及简单使用(图文教程)

    这篇文章主要介绍了MySQL 5.7 版本的安装及简单使用(图文教程)的相关资料,这里对mysql 5.7的安装及使用和注意事项,需要的朋友可以参考下
    2016-12-12
  • MySQL外键约束(FOREIGN KEY)的具体使用

    MySQL外键约束(FOREIGN KEY)的具体使用

    MySQL外键约束是表的一个特殊字段,经常与主键约束一起使用,本文主要介绍了MySQL外键约束(FOREIGN KEY)的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • MySQL8.0开启远程连接权限的方法步骤

    MySQL8.0开启远程连接权限的方法步骤

    MySQL8.0设置远程访问权限,找了一圈都没找到一个适用的,索性自己写一个,这篇文章主要给大家介绍了关于MySQL8.0开启远程连接权限的方法步骤,需要的朋友可以参考下
    2022-06-06
  • MySQL索引详解及演进过程及面试题延伸

    MySQL索引详解及演进过程及面试题延伸

    这篇文章主要介绍了MySQL索引详解及演进过程以及延申出面试题,索引在关系型数据库中,是一种单独的、物理的对数据库表中的一列或者多列值进行排序的一种存储结构
    2022-07-07
  • MySQL之高可用架构详解

    MySQL之高可用架构详解

    大家好,本篇文章主要讲的是MySQL之高可用架构详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Oracle更换为MySQL遇到的问题及解决

    Oracle更换为MySQL遇到的问题及解决

    前段时间自行安装MySQL8.0数据库,为数据库去Oracle做准备。现在公司正规划搭建MySQL集群。于是挑选两个应用,进行改造测试,积累下经验。
    2021-05-05
  • MySQL 5.7.20绿色版安装详细图文教程

    MySQL 5.7.20绿色版安装详细图文教程

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。这篇文章主要介绍了MySQL 5.7.20绿色版安装详细图文教程,需要的朋友可以参考下
    2017-11-11
  • 详解mysql 中的锁结构

    详解mysql 中的锁结构

    这篇文章主要介绍了mysql 中的锁结构的相关资料,帮助大家更好的理解和使用数据库,感兴趣的朋友可以了解下
    2020-10-10
  • MySQL迁移KingbaseESV8R2的实现步骤

    MySQL迁移KingbaseESV8R2的实现步骤

    本文主要介绍了MySQL迁移KingbaseESV8R2的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#列出局域网中可用SQL Server服务器

    C#列出局域网中可用SQL Server服务器

    SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复。
    2008-04-04

最新评论