首页 > 数据库 >使用 SQL 实现同比环比分析

使用 SQL 实现同比环比分析

时间:2022-12-30 11:36:29浏览次数:64  
标签:销量 累计 DATE 同比 SQL date 环比 数据

场景描述

在做数据分析时,经常会需要展示同比和环比的数据,可以通过 SQL 来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以及当月数据与去年同期数据的对比(同比);

效果展示

我先看一下将同比、环比的数据放到数据看板上的效果图:

使用 SQL 实现同比环比分析_大屏同比环比

上图是将某公司的销售数据做了同比和环比分析后,通过报表展示出来的效果,包含:线上线下销量的同比环比、各大区的销量月环比。

实现过程

测试数据预览

以下是我们分析的原始数据,数据来源于真实业务记录,所以部分数据进行了遮挡处理;

我们重点关注的数据:

  1. 每条数据代表一单销售业绩;
  2. “类型” 包含线上、线下;
  3. “成交日期” 是分析依据;
  4. “大区” 也是要分析的内容。

使用 SQL 实现同比环比分析_大屏同比环比_02

SQL实现过程

我们以 “线上销量的月环比” 做SQL实现步骤讲解

先统计每个月的线上销量

select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date

使用 SQL 实现同比环比分析_数据可视化_03

我们需要在每个月累计销量 后面 显示一列上月的销量:

select t.date tdate ,t.累计销量 本月销量 ,y.累计销量 上月销量

from

(select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) t

left JOIN

(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) y

on t.date = y.date

使用 SQL 实现同比环比分析_大屏同比环比_04

最后就可以通过 “本月销量” 和 “上月销量” 计算环比了;

计算公式为:(本月销量 - 上月销量) / 上月销量 *100%

select t.date tdate ,t.累计销量 本月销量 ,y.累计销量 上月销量,
case

when y.累计销量 is null or y.累计销量 = 0 then 0.00

else round((t.累计销量 - y.累计销量) / y.累计销量, 4)

end ratio

from

(select DATE_FORMAT(日期,'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) t

left JOIN

(select DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m') as date, count(*) as 累计销量 from renwu where 类型 = '线上' GROUP BY date) y

on t.date = y.date

使用 SQL 实现同比环比分析_同比环比_05

计算结果中的 “ratio” 就是计算的环比,这里保留了4位小数,是为了在报表中转化为百分比再保留两位小数。

我们只需要展示最新月份的环比,所以不需要把所有数据都列出来,只需要展示最新月份的一条数据即可,做最后的优化:

使用 SQL 实现同比环比分析_大屏同比环比_06

以上是环比计算的过程,同比计算只需要将增加的 “上月数据” 改为 “去年数据“ 即可

”DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 MONTH),'%Y-%m')” 
改为
”DATE_FORMAT(DATE_ADD(日期,INTERVAL 1 YEAR),'%Y-%m')”

展示同比环比

在 DataEase 的仪表板编辑界面,将SQL 的计算数据放到一个指标卡中显示即可,显示类型选择为 百分比显示,效果如下:

使用 SQL 实现同比环比分析_SQL同比环比_07

最终数据展示看板

使用 SQL 实现同比环比分析_数据可视化_08

以上看板展示工具为:​​DataEase​

标签:销量,累计,DATE,同比,SQL,date,环比,数据
From: https://blog.51cto.com/u_15922912/5979330

相关文章

  • MySQL 5.7 版本的安装及简单使用(图文教程)
    MySQL5.7版本的安装使用详细教程写得还是比较详细,甚至有些繁琐,有很多步骤在其他的教程文档里都是省略掉的,但是我还是要写出来,因为我当时走了很多弯路,我希望你们能够避免我......
  • MySQL数据库优化的八种方式(经典必看)MySQL数据库优化的八种方式(经典必看)
    MySQL数据库优化的八种方式(经典必看) MySQL/Oracle数据库优化总结(非常全面)置顶2017年08月21日21:05:30阅读数:8442MySQL数据库优化的八种方式(经典必看)引言: ​​关于......
  • mysql 关联查询速度慢 (解决)
     转载:https://blog.csdn.net/qq_48091113/article/details/122695260 1.记录原因:mysql关联查询速度很慢,是由于字段字符集规则不一致所导致1.1在一次线上的服务中,......
  • 10-Mysql注入漏洞
    手工注入:get:url中带参数xxx.asp/asp?id=123123单引号and1=1/-0baidu.com/xxx.php?id=12312string=hasdfsdstring=网站asp/aspxaccess/sqlserverpost:搜索框、登录、注册、......
  • mysql root 用户有多个密码
    mysql是用用户名+ip来区分用户的,如下,是三个不同的用户'username'@'localhost''username'@'127.0.0.1''username'@'%'在mysql,不同ip的同一用户尽量用同一个密码参......
  • linux离线安装postgresql
    1.软件包说明软件包 说明postgresqllibrariesandclientbinariespostgresql-server coredatabaseserverpostgresql-contrib additionalsuppliedmodulespostgresql-......
  • 用Java开发出网站,在其中输入中文,但是保存到MySQL数据库中却是????
    前言:前两部分是从mysql和eclipse的角度去解决,在解决的过程中学到了之前没设计到的查看和修改数据库或数据表的字符集的知识。后一部分是掌握了前两步后,进行的新一轮解决问题......
  • MeterSphere 查询SQL引入接口做参数,前置SQL应用
    1、配置数据源在项目配置环境中编写数据库配置  2、编写SQL语句添加前置SQL 请求参数中使用  ${列名_1}指返回数据中第一个数值 参考:https://blog.cs......
  • 锦囊秘籍!用Python操作MySQL的使用教程集锦!
    一.python操作数据库介绍大家好,我是毕加锁(锁!)。Python标准数据库接口为PythonDB-API,PythonDB-API为开发人员提供了数据库应用编程接口。Python数据库接口支持非常多的......
  • Mysql索引覆盖
    作者:孙涛1.什么是覆盖索引通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个查询,而不仅仅是where条件部分,还应该关注......