SQL的两道练习
找了两道Hive有关的SQL练习题目,第一道是统计用户浏览量的数据。第二道是统计京东商铺浏览量的数据。
(一)统计用户浏览量
我们有如下的用户访问数据
userId | visitDate | visitCount |
---|---|---|
u01 | 2017/1/21 | 5 |
u02 | 2017/1/23 | 6 |
u03 | 2017/1/22 | 8 |
u04 | 2017/1/20 | 3 |
u01 | 2017/1/23 | 6 |
u01 | 2017/2/21 | 8 |
u02 | 2017/1/23 | 6 |
u01 | 2017/2/22 | 4 |
要求使用SQL统计出每个用户的累积访问次数,如下表所示:
用户id | 月份 | 小计 | 累积 |
---|---|---|---|
u01 | 2017-01 | 11 | 11 |
u01 | 2017-02 | 12 | 23 |
u02 | 2017-01 | 12 | 12 |
u03 | 2017-01 | 8 | 8 |
u04 | 2017-01 | 3 | 3 |
原始数据如下:
1 | u01 2017/1/21 5 |
建表语句
1 | create table action |
答:
一、首先转换月份格式,统计每个月、每个用户的访问量
1 | SELECT |
执行结果:
1 | id mon views |
二、再按照月份和用户进行分组并统计访问量。
1 | SELECT |
执行结果
1 | id mon views |
三、 对每个用户的数据进行累加,再次子查询
1 | select |
执行结果
1 | userid mon views total |
(二)统计网店访问量
有50W个京东店铺,每个顾客访问任何一个店铺的任何一个商品时都会产生一条访问日志,访问日志存储的表名为visit,访客的用户id为user_id,被访问的店铺名称为shop,请统计:
原始数据如下:
1 | u1 a |
建表:
1 | create table visit(user_id string,shop string) |
问:
1)每个店铺的UV(访客数)
2)每个店铺访问次数top3的访客信息。输出店铺名称、访客id、访问次数
答:
1)
一、使用GROUP BY对用户进行去重
1 | SELECT |
执行结果:
1 | shop user_id |
二、对去重的结果进行用户数目统计
1 | SELECT |
执行结果
1 | shop uv |
2)
一、计算每个人访问每个店铺的总次数
1 | SELECT |
二、针对同一店铺,对方问次数进行逆序排序,并计算rank值
1 | SELECT |
三、去店铺访问前三名的用户
1 | SELECT |
3
Exer4:
1 | CREATE TABLE user_age |
1、所有用户的总数及平均年龄
1 | SELECT |
1 |
|
~~~~~~~~~~~结果~~~~~~~~~~~
count1 avg_total_age
3 27.0
1 |
|