挑战100天不停更,刷爆 hive sql第26天 - 场景题-访问统计

🌿挑战100天不停更,刷爆 hive sql🧲

详情请点击🔗我的专栏🖲,共同学习,一起进步~

NUM: 第26天 -访问统计

先说几个关键函数
date_format()
regexp_replace()
sum() over()
如果对这几个函数都比较熟悉的话,下面内容可以不用看了,嵌套个子查询就能查出来
如果考虑到访问记录的去重问题:,可以参考另外一篇:
挑战100天不停更hive sql第24天 -累计去重

🧨刷题~~🧨

🎈表结构

userid:用户
visitdate:日期
visitcount:访问次数
image.png

🎉建表并插入数据

CREATE TABLE daily_sql.t26
(
    userId     string,
    visitDate  string,
    visitCount INT
)
    ROW format delimited FIELDS TERMINATED BY "\t";


INSERT INTO TABLE daily_sql.t26
VALUES ('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);

👓问题:以年为单位统计每个用户每月的累积访问次数,如下表所示

✨先看执行结果

image.png

解法:

🎨思考

🧨SQL
select
    userId
    ,month
    ,month_cnt
    ,sum(month_cnt) over(partition by userId order by month )
from (
         select userId
              , month
              , sum(visitCount) month_cnt
         from (
             select *
                    --这里不能直接转换
                    -- ,date_format(unix_timestamp(visitDate,'yyyy/MM/dd'),'yyyy/MM')
                    , date_format(regexp_replace(visitDate, '/', '-'), 'yyyy-MM') month
               from t26
             ) t1
         group by userId, t1.month) t2

关于sql的规范问题

尽量把逗号放在前面,为什么?
1,方便排查,不会遗漏逗号
2,方便注释,可以单行直接注释,不用再改逗号
3,排版看起来更紧密,我用datagrip快捷键ctrl + alt+ L可以快速缩进
4,特别用datagrip进行快速复制一行的时候,只需要Ctrl + D不需要关注逗号,写起来很快

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员的三板斧

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

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

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

打赏作者

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

抵扣说明:

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

余额充值