SQL题与解析
文章目录
1. 活跃业务查询
- 解题思路:
- 先用自查询计算每种事件类型(event_type)的平均值,使用分组和AVG函数。
- 将原表与自查询计算的事件平均值表JOIN(条件是事件类型相同),使原表每行获得事件平均值。
- 过滤JOIN后表格中不符合条件(occurences小于平均值)的行,并按业务分组计算每种业务(bussiness_id)还有两个事件符合的数量。
- 最后用最外层查询过滤符合条件的业务。也可以用HAVING直接过滤。
SELECT
business_id
FROM(
SELECT
business_id,
COUNT(1) AS num
FROM
Events AS e
JOIN (
SELECT
event_type,
AVG(occurences) AS eventAvg
FROM
Events
GROUP BY
event_type
) AS e1
ON
e.event_type = e1.event_type
WHERE
e.occurences > e1.eventAvg
GROUP BY
business_id
) o1
WHERE
num >= 2