Events table:
business_id | event_type | occurences |
---|---|---|
1 | reviews | 7 |
3 | reviews | 3 |
1 | ads | 11 |
2 | ads | 7 |
3 | ads | 6 |
1 | page views | 3 |
2 | page views | 12 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/active-businesses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
写一段 SQL 来查询所有活跃的业务。
如果一个业务的某个事件类型的发生次数大于此事件类型在所有业务中的平均发生次数,并且该业务至少有两个这样的事件类型,那么该业务就可被看做是活跃业务。
这道题的话看起来弯弯绕绕的,把我懵住了。
其实拆解之后也是比较好理解的。
- 首先求出各个事件类型的平均值
- 其次和原表进行join方便比较大小
- 要求这样的情况出现至少两次,group by之后having count即可
SELECT business_id
FROM Events AS e2
JOIN
(
SELECT event_type, AVG(occurences) AS eventAvg
FROM Events
GROUP BY event_type
) AS e1
ON e2.event_type = e1.event_type
WHERE e2.occurences > e1.eventAvg
GROUP BY business_id
HAVING COUNT(*) >= 2