TOP N问题

发布时间 2024-01-02 21:38:11作者: 小碗吃不胖的
已知用户浏览商品的浏览日志表(visit_table):

 求2月份每个商品浏览次数Top 3。

select name
    ,userid
    ,visit_cnt
from 
(
    select *
        ,row_number(position by name order by visit_cnt desc) as cnt 
    from 
    (
        select name
            ,userid
            ,count(1) as visit_cnt 
        from visit_table 
        where login_date>='2021/2/1' and login_date<='2021/2/28'
        group by name,userid
    ) a
) b
where cnt<=3

 

 

思路解析:

1、先统计每个商品、每个用户的浏览次数(visit_cnt),得到表 a

2、对表a求出每个商品浏览次的数降序排名,得到表b

3、对排序cnt进行top 3筛选操作