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

devtools/2024/10/9 8:52:00/

目录

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/devtools/123296.html

相关文章

【C语言刷力扣】LCR 182.动态口令

题目: 解题思路: 字符串拼接,先遍历复制从下标为 target 开始的 len - target 位字符,再遍历复制前 target位字符至末尾。 char* dynamicPassword(char* password, int target) {int len strlen(password);// int num 0;int i …

一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)

背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天,我们经常需要对某个数据请求进行多次尝试。然而,当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时,请求…

基于UDP协议的网络通信

和TCP协议不同的是,UDP协议不需要进行稳定的连接即可直接对数据进行收发,即面向非连接的。所以UDP的应用场景在音视频流传输、在线游戏以及网络聊天室等实时传输需求大的背景。因为不需要建立连接,UDP的网络编程模型就比TCP简单许多。 接收端…

xilinx中bufgce

在Xilinx的FPGA设计中,BUFGCE是一种重要的全局时钟缓冲器原语,它基于BUFGCTRL并以一些引脚连接逻辑高电位和低电位。以下是对BUFGCE的详细解析: 一、BUFGCE的功能与特点 功能:BUFGCE是带有时钟使能信号的全局缓冲器。它接收一个时…

怎样查局域网里的所有ip?

如果想高效管理网络设备,识别配置、更新和维护各类连接设备,排查网络故障,提升网络安全性,监控异常 IP 活动,发现潜在威胁等需要知道局域网。那么怎样查局域网里的所有ip呢? 一、局域网IP是什么&#xff1…

使用Selenium自动化测试定位iframe以及修改img标签的display属性值

在使用 Selenium 进行自动化测试时,处理 iframe 是一个常见问题。当页面中出现 iframe 时,需要先切换到该 iframe 内部,才能正常定位和操作其中的元素。以下是处理 iframe 的步骤和示例代码: 步骤 切换到 iframe:使用…

RabbitMQ安装(Ubuntu环境)

安装Erlang RabbitMq需要Erlang语⾔的⽀持,在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 erl 退出命令 halt( ). 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 rabbi…

C/C++语言基础--C++IO流、输入输出流、文件流、字符串流、重定向流等详解

本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 流思想,我认为在计算机中是一个很重要的思想,因为计算机、编程无非就是获取数据,然后对数据进行操作;C给主要给我们提供了3种流,输入输出流、文件流…