7.统计UV、分组TopN

50w个京东店铺,每个顾客访问任何一个店铺的任何一个商品时都会产生一条访问日志,访问日志存储的表名为Visit,访客的用户iduser_id,被访问的店铺名称为shop,数据如下:

在这里插入图片描述

请统计:

(1) 每个店铺的UV(访客数)

(2) 每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数

实现

(1) 每个店铺的UV统计,最简单的分组统计即可

select shop,
       count(distinct user_id) as uv
from test2 group by shop;

在这里插入图片描述

(2) 每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数

第一步:先统计每个店铺每个访客的访问次数

select user_id,shop,
       count(*) as cnt
from test2
group by user_id,shop
order by shop,user_id

在这里插入图片描述

接下来,我们对访客的访问次数进行倒序排序,并筛选访问次数top3的访客信息,嵌套子查询比较多,可读性不好,因此使用with as

with t1 as (
    select user_id,
           shop,
           count(*) as cnt
    from test2
    group by user_id, shop
    order by shop, user_id
),
     t2 as (
         select shop,
                user_id,
                cnt,
                row_number() over (partition by shop order by cnt desc) rn
         from t1
     )
select *from t2 where rn<=3 order by shop ,cnt desc;

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值