ex_02

需求:

一.每个店铺的uv(访客数)

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

建表:

create table visit(user_id string,shop string)

row format delimited fields terminated by '\t';

答案1

方法一:使用distribute by(不建议使用不够优化)

select shop,count(distinct user_id) uv

from

visit

group by shop;

方法二:

1.去重

select shop,user_id

from visit

group by shop,user_id;

2.计数

select shop,count(*) uv

from (select shop,count(distinct user_id) uv

from

visit

group by shop,user_id)t1

group by shop;


二、

1.计算每个人访问每个店铺的总次数

select shop,user_id,count(*) ct

from visit

group by shop,user_id;

2.针对同一店铺,对访问次数进行逆序排序,并添加rank值

select shop,user_id,ct,

row_number() over(partition by shop order by ct desc) rk

from(select shop,user_id,count(*) ct

from visit

group by shop,user_id)t1;

3.去店铺访问前三名的用户

select shop,user_id,ct

from(select shop,user_id,ct,

row_number() over(partition by shop order by ct desc) rk

from(select shop,user_id,count(*) ct

from visit

group by shop,user_id)t1)t2

where rk<=3;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容