sql面试题03

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

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

假如后台数据客户访问网店日志如下:

user_id             shop
u1                  a
u1                  b
u1                  a
u1                  a
u1                  b
u2                  b
u2                  c
u2                  c
u2                  a
u2                  a
u3                  c
u3                  a
u4                  b
u4                  b
u5                  b
u5                  a
u5                  a
u5                  a
u6                  c

创建表:

create table shopping_log(
    user_id   varchar(20)
   ,shop      varchar(20)
);

insert into shopping_log values
 ('u1','a')
,('u1','b')
,('u1','a')
,('u1','a')
,('u1','b')
,('u2','b')
,('u2','c')
,('u2','c')
,('u2','a')
,('u2','a')
,('u3','c')
,('u3','a')
,('u4','b')
,('u4','b')
,('u5','b')
,('u5','a')
,('u5','a')
,('u5','a')
,('u6','c');

sql实现:

select t2.shop,t2.user_id,t2.c from(
select shop,user_id,t1.c as c,dense_rank() over(partition by shop order by c desc) rn from(
select shop,user_id,count(1) c from shopping_log group by 1,2 )t1
)t2
where t2.rn<=3

实现效果如下:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿老杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值