[每日一练]30天内活跃的用户数

题目来源于力扣:

1141. 查询近30天活跃用户数 - 力扣(LeetCode)题目要求:

表:Activity

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| session_id    | int     |
| activity_date | date    |
| activity_type | enum    |
+---------------+---------+
该表没有包含重复数据。
activity_type 列是 ENUM(category) 类型, 从 ('open_session', 'end_session', 'scroll_down', 'send_message') 取值。
该表记录社交媒体网站的用户活动。
注意,每个会话只属于一个用户。
 

编写解决方案,统计截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。

以 任意顺序 返回结果表。

 思路流程:

即要求在截至 2019-07-27内的每日不同用户数量。

首先,我们要输出统计过去重后的用户,利用 COUNT(DISTINCT user_id) 即可

其次,我们要统计在2019-07-27截止日期30内的天数:

    方法1: activity_date between "2019-06-28" and "2019-07-27"

    方法2:datediff("2019-07-27",activity_date) between 0 and 29

个人推荐利用方法2来进行计算,方法1要人工计算天数日期,而方法2利用datediff日期差值计算函数,可以自动计算出"2019-07-27"和登陆日期的差值,只要这个差值在0-29内(30天的天数,包含截止日期),即可实现需求,而且灵活性更强大,可以适应多种情况

最后按天数进行分组,即可看出每天的不同用户数量了

代码实现:

# Write your MySQL query statement below
select activity_date as day , count(DISTINCT user_id) as active_users 
from Activity
where  datediff("2019-07-27",activity_date) between 0 and 29
group by activity_date  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值