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