Leetcode 1141. 1142 User Activity for the Past 30 Days

设计SQL查询以获取2019-07-27及其前30天内的每日活跃用户数及平均会话数,用户在某日至少有一次活动则视为活跃,会话计数要求至少有一次活动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drop table Activity
Create table Activity (user_id int, session_id int, activity_date date, activity_type varchar(20))

insert into Activity (user_id, session_id, activity_date, activity_type) values ('1', '1', '2019-07-20', 'open_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('1', '1', '2019-07-20', 'scroll_down')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('1', '1', '2019-07-20', 'end_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('2', '4', '2019-07-20', 'open_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('2', '4', '2019-07-21', 'send_message')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('2', '4', '2019-07-21', 'end_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('3', '2', '2019-07-21', 'open_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('3', '2', '2019-07-21', 'send_message')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('3', '2', '2019-07-21', 'end_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('4', '3', '2019-06-25', 'open_session')
insert into Activity (user_id, session_id, activity_date, activity_type) values ('4', '3', '2019-06-25', 'end_session')

1141. User Activity for the Past 30 Days I

Write an SQL query to find the daily active user count for a period of 30 days ending 2019-07-27 inclusively. A user was active on some day if he/she made at least one activity on that day.

 

select activity_date as [day]
,count(distinct user_id) as active_users
from Activity
where DATEDIFF(day,activity_date,'2019-07-27')<30
group by activity_date

1142. User Activity for the Past 30 Days II

Write an SQL query to find the average number of sessions per user for a period of 30 days ending 2019-07-27 inclusively, rounded to 2 decimal places. The sessions we want to count for a user are those with at least one activity in that time period.

 

CTE

with cte1 as(
select count(activity_type) as total
from Activity
where DATEDIFF(day,activity_date,'2019-07-27')<=30
and activity_type in ('scroll_down','send_message')
), cte2 as (select count(distinct user_id) as people
 from Activity
where DATEDIFF(day,activity_date,'2019-07-27')<=30) 
select round(cast(c1.total as float) /cast(c2.people as float),2)
from cte1 c1,cte2 c2 as average_sessions_per_user

General

select round(cast(count(activity_type) as float) /cast(count(distinct user_id) as float),2) as average_sessions_per_user
from Activity 
where DATEDIFF(day,activity_date,'2019-07-27')<=30
and activity_type in ('scroll_down','send_message')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值