题目来自leetcode
记录题型,做题方法,错误原因和注意事项
如有问题 请及时纠正
1.每日用户统计
编写一个 SQL 查询,以查询从今天起最多 90 天内,每个日期该日期首次登录的用户数。假设今天是 2019-06-30.
select a.login_date,count(a.user_id) as 'user_count'
from
(select distinct t.user_id,min(t.activity_date) as 'login_date'
from Traffic t
where t.activity='login'
group by t.user_id
) a
where datediff("2019-06-30",a.login_date) <= 90
group by 1
九十天内用datediff("2019-06-30",a.login_date) <= 90 #注意datediff()日期要用双引号
90天前是4.1不是3.30
时间判断条件要在a表的基础上 不然会选中90天前第一次登陆 之后重复 登陆的用户 不要忘记登陆条件是login
2.查询活跃业务
如果一个业务的某个事件类型的发生次数大于此事件类型在所有业务中的平均发生次数,并且该业务至少有两个这样的事件类型,那么该业务就可被看做是活跃业务。
select distinct business_id from events e left join
(select distinct event_type,avg(occurences) as 'occurences' from events
group by event_type) a
on e.event_type=a.event_type
where e.occurences>a.occurences
group by business_id
having count(*)>1
选择至少有两个type用group having count… 最好不再select一次
3.用户购买平台
写一段 SQL 来查找每天 仅 使用手机端用户、仅 使用桌面端用户和 同时 使用桌面端和手机端的用户人数和总支出金额。
select a.spend_date,a.platform,ifnull(sum(amount