SQL进阶技巧:如何计算累计指标?

目录

0 需求描述

1 数据准备

2 问题分析

3 小结

如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:

数字化建设通关指南

专栏 原价99,现在活动价59.9,按照阶梯式增长,直到恢复原价。


0 需求描述

 我们有如下的用户访问数据
    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 数据准备

create table visit as(

  select stack (

    8,
    '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

  ) as(user_id,visit_time,visit_cnt)

);

 

2 问题分析

第一步:求出每个用户每月的访问次数

select user_id
     , date_format(regexp_replace(visit_time, '/', '-'), 'yyyy-MM') year_month
     , sum(visit_cnt)                                               visit_cnt
from visit
group by user_id, date_format(regexp_replace(visit_time, '/', '-'), 'yyyy-MM')

 

第二步:利用分析函数在步骤1的基础上求出每月的累计访问次数 

with t1 as
         (select user_id
               , date_format(regexp_replace(visit_time, '/', '-'), 'yyyy-MM') year_month
               , sum(visit_cnt)                                               visit_cnt
          from visit
          group by user_id, date_format(regexp_replace(visit_time, '/', '-'), 'yyyy-MM'))

select user_id
     , year_month
     , visit_cnt
     , sum(visit_cnt) over (partition by user_id order by year_month) acc_visit_cnt
from t1

 

3 小结

本文给出了一种累计指标的计算方法,主要涉及的知识点如下:

  •   (1)regexp_replace函数的使用
  •   (2)date_format函数的使用
  •   (3)累计指标求解。sum() over()
如果觉得本文对你有帮助,想进一步学习SQL语言这门艺术的,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下:
数字化建设通关指南
专栏 原价99,现在活动价59.9,按照阶梯式增长,直到恢复原价。

 

专栏主要内容:
(1)SQL进阶实战技巧
可以参考如下教程,具体链接如下

SQL很简单,可你却写不好?也许这才是SQL最好的教程

上面链接中的文章及技巧会不定期更新。

(2)数仓建模实战技巧和个人心得
       1)新人入职新公司后应如何快速了解业务?

       2)以业务视角看宽表化建设?

       3)  维度建模 or 关系型建模?

       4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?

       5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系                           该由谁来搭建?

       6)如何优雅设计DWS层?DWS层模型好坏该如何评价?

       7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?

       8) 数据架构的选择,mpp or hadoop?

       9)数仓团队应如何体现自己的业务价值,讲好数据故事?

       10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关                          系?

       11)数据部门如何与业务部门沟通,并规划指引业务需求?

文章不限于以上内容,有新的想法也会及时更新到该专栏。

具体专栏链接如下: 

 ​​​​​​数字化建设通关指南_莫叫石榴姐的博客-CSDN博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值