Leetcode_1126. 查询活跃业务

题目难度

中等

题目描述

写一段 SQL 来查询所有活跃的业务。
如果一个业务的某个事件类型的发生次数大于此事件类型在所有业务中的平均发生次数,并且该业务至少有两个这样的事件类型,那么该业务就可被看做是活跃业务。
查询结果格式如下所示:

在这里插入图片描述
‘reviews’、 ‘ads’ 和 ‘page views’ 的总平均发生次数分别是 (7+3)/2=5, (11+7+6)/3=8, (3+12)/2=7.5。
id 为 1 的业务有 7 个 ‘reviews’ 事件(大于 5)和 11 个 ‘ads’ 事件(大于 8),所以它是活跃业务。

正确答案
select business_id
from Events e 
left join 
	(select event_type,avg(occurences) as average    
	from Events    
	group by event_type) t
on e.event_type=t.event_type
where e.occurences>t.average
group by business_id
having count(distinct e.event_type)>=2
思路
  • 先计算各事件类型(event_type)的平均发生次数(average)左连接到原表中。
  • where筛选出发生次数大于均值的事件
    注意这里通过where筛选,而不是在左连接时on中筛选。如果把条件放在on中,会把不满足条件的数据用null填充,而不是筛选掉原表中的数据。容易混淆。
  • group by+having筛选出至少两个事件大于平均次数的业务。

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/active-businesses

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值