Sql 练习

有50W个京东店铺,每个顾客访客访问任何一个店铺的任何一个商品时都会产生一条访问日志,访问日志存储的表名为Visit,访客的用户id为user_id,被访问的店铺名称为shop,请统计:

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

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

 

u01    a
u02    b
u03    b
u04    a
u01    b
u01    c
u02    b
u01    c
u01    a
u02    b
u03    c
u04    a
u01    c
u01    c
u02    a
u01    b

create table sql02(userid string,shop string)
row format delimited fields terminated by '\t'
stored as textfile;

load data local inpath '/root/in/sql02' into table sql02;

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

去重每个店的用户
select shop,userid from sql02 group by shop,userid;t1

计算pv
select 
shop,
count(*)
from (select shop,userid from sql02 group by shop,userid)t1
group by shop;


去重每个店的每个用户,获得数量
select
userid,
shop,
count(*) num
from 
sql02
group by userid,shop;t1

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

排名
select
shop,
userid,
num,
row_number() over(partition by shop order by num desc) rank
from
(select
userid,
shop,
count(*) num
from 
sql02
group by userid,shop)t1;t2

取前三
select shop,userid,num
from
(select
shop,
userid,
num,
row_number() over(partition by shop order by num desc) rank
from
(select
userid,
shop,
count(*) num
from 
sql02
group by userid,shop)t1)t2
where rank<3;
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值