力扣白嫖日记(sql)

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

1141.查询近30天活跃用户数
表:Activity

列名类型
user_idint
session_idint
activity_datedate
activity_typeenum

该表没有包含重复数据。
activity_type 列是 ENUM(category) 类型, 从 (‘open_session’, ‘end_session’, ‘scroll_down’, ‘send_message’) 取值。该表记录社交媒体网站的用户活动。注意,每个会话只属于一个用户。

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


我那不值一提的想法:

#我的思路:首先梳理表内容,题目只给了一张活跃表,记录了用户id,会话id,活跃日期,活跃类型(“open_session”,“end_session”,“scroll_down”,“send_message”)。其次分析需求,统计截至2019-07-27(包含2019-07-27),近30天的每日活跃用户数(题干要求只要activity_type只要有数据就算活跃用户),我首先想到的就是datediff函数,计算差值要小于等于30天的。然后对日期进行分组,计算count(活跃类型)>=1,得出查询结果。

select activity_date as day , count(distinct user_id) as active_users
from Activity
where datediff("2019-07-27",activity_date) <= 30 
group by activity_date
having count(activity_type) >=1

我首先用以上代码提交,发现结果错误,我看了下查询结果,发现查询结果里没有6月27日,后面我才明白了,因为题干说了包含了7月27日,所以不能等30,应该是29+1 = 30,所以不能加等号,于是我去掉了等号:

select activity_date as day , count(distinct user_id) as active_users
from Activity
where datediff("2019-07-27",activity_date) < 30 
group by activity_date
having count(activity_type) >=1

好好好,发现结果又错了,我查询了结果,发现了直接查询到了8月份的数据了,我才反应过来,原来负数也算小于30的,但题干说明是7月27日截止,所以我们还需要加个条件就是datediff>=0

select activity_date as day , count(distinct user_id) as active_users
from Activity
where datediff("2019-07-27",activity_date) < 30 and datediff("2019-07-27",activity_date) >= 0
group by activity_date
having count(activity_type) >=1

结果:

在这里插入图片描述


总结:

能运行就行。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值