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

news/2024/12/21 22:28:24/

目录

0 需求描述

1 数据准备

2 问题分析

3 小结

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

数字化建设通关指南

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


0 需求描述

sql"> 我们有如下的用户访问数据userId  visitDate   visitCountu01     2017/1/21        5u02     2017/1/23        6u03     2017/1/22        8u04     2017/1/20        3u01     2017/1/23        6u01     2017/2/21        8U02     2017/1/23        6U01     2017/2/22        4要求使用SQL统计出每个用户的累积访问次数,如下表所示:用户id    月份    小计  累积u01     2017-01  11    11u01     2017-02  12    23u02     2017-01  12    12u03     2017-01  8     8u04     2017-01  3     3

1 数据准备

sql">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 问题分析

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

sql">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的基础上求出每月的累计访问次数 

sql">with t1 as(select user_id, date_format(regexp_replace(visit_time, '/', '-'), 'yyyy-MM') year_month, sum(visit_cnt)                                               visit_cntfrom visitgroup 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博客

 


http://www.ppmy.cn/news/1536562.html

相关文章

Java的锁机制详解

在并发编程中,锁 是用于控制多个线程对共享资源进行访问的工具。Java提供了多种锁机制,从最基础的 synchronized 到高级的 ReentrantLock,这些锁帮助我们确保线程安全,并能有效避免数据竞争和死锁问题。 1. synchronized 关键字…

蒙特卡罗方法 - 重要采样篇

序言 蒙特卡罗方法,作为一种基于随机抽样的数值计算方法,在金融、物理、工程等多个领域展现出了强大的应用潜力。然而,传统蒙特卡罗方法在处理某些特定问题时,可能会遇到收敛速度慢、计算成本高等挑战。为了克服这些难题&#xf…

如何使用GeoIP和ELK(Elasticsearch、Logstash和Kibana)映射用户位置

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 IP 地理定位是用于确定 IP 地址的物理位置的过程,可以用于各种目的,如内容个性化和流量分析。通过地理位置…

利用redis实现分布式定时任务

如果是微服务,两个服务都有定时,那么就出问题了,但是上分布式定时任务框架太麻烦怎么办,那么就用redis加个锁,谁先抢到锁谁执行 整个工具类 import org.springframework.beans.factory.annotation.Autowired; import …

宠物咖啡馆数字化解决方案:基于SpringBoot的实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

手机竖屏 Premiere Pro 电影转场特效视频模板Pr工程文件

10个不同的类别和115个过渡。过渡很容易使用。随附视频教程。 下载地址:Pr模板网 下载链接:https://prmuban.com/40597.html

Chromium 搜索引擎功能浅析c++

地址栏输入:chrome://settings/searchEngines 可以看到 有百度等数据源,那么如何调整其顺序呢,此数据又存储在哪里呢? 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

js基础速成13-Console 对象方法

Console 对象方法 在本节中,我们将介绍 console 及其对象方法。对于绝对初学者来说,通常不知道该使用 console.log()、document.write() 还是 document.getElementById()。 我们使用 console 对象的方法在浏览器控制台显示输出,使用 docume…