【题目】
用户访问次数表,列名包括用户编号、用户类型、访问量。要求在剔除访问次数前 20% 的用户后,每类用户的平均访问次数。(拼多多、网易面试题)
【解题思路】
使用逻辑树分析方法可以把这个复杂的问题拆解为 3 个子问题:
1)找出访问次数前 20% 的用户
2)剔除访问次数前 20% 的用户
3)每类用户的平均访问次数
下面分别来解决每个子问题
- 访问次数前 20% 的用户
先按 “访问次数” 排名,然后就可以找到”前 20%”的数据。排名问题可以用窗口函数来解决。
首先对所有用户的访问量按从低到高的顺序用窗口函数排名:
select * , row_number() over (order by 访问量 desc) as 排名
from 用户访问次数表
select * from (