大体思路:

MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份、月份,然后通过left join关联时间字段去计算环比、同比公式即可

原始表结构:

求同比SQL:

-- 按年同比

SELECTt5.*,CASEWHENt5.last_energy_yearISNULLORt5.last_energy_year =0THEN0.00

ELSEFORMAT(((t5.energy_year - t5.last_energy_year)/t5.last_energy_year)*100,2)

ENDYoY-- 同比

FROM(

SELECTt3.*,t4.last_energy_year

FROM

(

SELECTDATE_FORMAT(CONCAT(t1.`tyear`,‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘)ASYearMonth,t1.tyear,SUM(t1.energy_month) energy_year,t1.linename

FROM(SELECT

t.*,COUNT(DISTINCTt.`tyear`,t.`tmonth`,t.`linename`) c_cot

FROM`ksh_tgyjy_llxgyjydlxx` t

GROUPBYt.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1

GROUPBYt1.tyear,t1.`linename`

) t3

LEFTJOIN

(

SELECTDATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`,‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘),INTERVAL 1YEAR)ASlastYearMonth,t1.tyear,SUM(t1.energy_month) last_energy_year,t1.linename

FROM(SELECTt.*,COUNT(DISTINCTt.`tyear`,t.`tmonth`,t.`linename`) c_cot

FROM`ksh_tgyjy_llxgyjydlxx` t

GROUPBYt.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1

GROUPBYt1.tyear,t1.`linename`

) t4

ONt3.YearMonth = t4.lastYearMonth

ANDt3.linename = t4.linename

) t5-- 按年同比SELECT t5.*, CASE WHEN t5.last_energy_year IS NULL OR t5.last_energy_year =0 THEN 0.00                ELSE FORMAT(((t5.energy_year - t5.last_energy_year)/t5.last_energy_year)*100,2)         END YoY  -- 同比FROM (    SELECT t3.*,t4.last_energy_year    FROM     (       SELECT DATE_FORMAT(CONCAT(t1.`tyear`, ‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘) AS YearMonth,t1.tyear,SUM(t1.energy_month) energy_year,t1.linename        FROM(SELECT         t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot         FROM `ksh_tgyjy_llxgyjydlxx` t         GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1        GROUP BY t1.tyear,t1.`linename`     ) t3       LEFT JOIN     (      SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`, ‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘),INTERVAL 1 YEAR) AS lastYearMonth,t1.tyear,SUM(t1.energy_month) last_energy_year,t1.linename        FROM(SELECT t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot         FROM `ksh_tgyjy_llxgyjydlxx` t         GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1        GROUP BY t1.tyear,t1.`linename`    ) t4    ON t3.YearMonth = t4.lastYearMonth    AND t3.linename = t4.linename ) t5

查询结果:

求月环比SQL:

-- 按月同比

SELECTDATE_FORMAT(t5.YearMonth,‘%Y-%m‘) YearMonth,t5.`linename`,t5.`energy_month`,

CASEWHENt5.lat_energy_monthISNULLORt5.lat_energy_month=0THEN0.00

ELSEFORMAT(((t5.energy_month - t5.lat_energy_month)/t5.lat_energy_month)*100,2)

ENDYoY

FROM(

SELECTt3.*,t4.energy_month lat_energy_month

FROM

(

SELECTDATE_FORMAT(CONCAT(t1.`tyear`,‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘)ASYearMonth,t1.*

FROM(SELECT

t.*,COUNT(DISTINCTt.`tyear`,t.`tmonth`,t.`linename`) c_cot

FROM`ksh_tgyjy_llxgyjydlxx` t

GROUPBYt.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1

) t3

LEFTJOIN

(

SELECTDATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`,‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘),INTERVAL 1YEAR)ASlastYearMonth,t1.*

FROM(SELECTt.*,COUNT(DISTINCTt.`tyear`,t.`tmonth`,t.`linename`) c_cot

FROM`ksh_tgyjy_llxgyjydlxx` t

GROUPBYt.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1

) t4

ONt3.YearMonth = t4.lastYearMonth

ANDt3.linename = t4.linename

) t5-- 按月同比SELECT DATE_FORMAT(t5.YearMonth,‘%Y-%m‘) YearMonth,t5.`linename`,t5.`energy_month`,          CASE WHEN t5.lat_energy_month IS NULL OR t5.lat_energy_month=0 THEN 0.00                 ELSE FORMAT(((t5.energy_month - t5.lat_energy_month)/t5.lat_energy_month)*100,2)         END YoYFROM (    SELECT t3.*,t4.energy_month lat_energy_month     FROM     (      SELECT DATE_FORMAT(CONCAT(t1.`tyear`, ‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘) AS YearMonth,t1.*        FROM(SELECT           t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot           FROM `ksh_tgyjy_llxgyjydlxx` t           GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1     ) t3        LEFT JOIN     (      SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`, ‘-‘, t1.`tmonth`,‘-01‘),‘%Y-%m-%d‘),INTERVAL 1 YEAR) AS lastYearMonth,t1.*         FROM(SELECT t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot         FROM `ksh_tgyjy_llxgyjydlxx` t         GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1    ) t4    ON t3.YearMonth = t4.lastYearMonth    AND t3.linename = t4.linename) t5

查询结果:

mysql计算同比和环比的区别_MySQL统计同比环比SQL相关推荐

  1. mysql计算两个经纬度之间的距离_mysql计算两个经纬度之间的距离公式

    #1.两点距离(1.4142135623730951)select st_distance(point(0,0),point(1,1));select st_distance(point (120.1 ...

  2. mysql典型安装和完全安装的区别_MySQL安装详解(安装版本mysql-5.5.25)

    步骤1:选择安装类型 有3种安装类型:Typical(典型安装).Complete(完全安装)和Custom(定制安装). Typical(典型安装)安装:只安装MySQL服务器.mysql命令行客户 ...

  3. mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度. ...

  4. mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...

    因为业务需求,要统计每天的新增用户并且要用折线图的方式展示. 如果其中有一天没有新增用户的话,这一天就是空缺的,在绘制折线图的时候是不允许的,所有要求把没有数据的日期也要在图表显示. 查询2019-0 ...

  5. mysql查询前12个月的数据_MySQL 统计过去12个月的数据(包括本月),mysql本月

    MySQL 统计过去12个月的数据(包括本月),mysql本月 1.问题 需要统计过去12个月的数据,如现在是2015年4月,那么我们需要统计从2014年5月到2015年4月的数据情况.而这12个月中 ...

  6. mysql 从第几个字符串开始截取_MySQL 截取字符串函数的sql语句

    1.left(name,4)截取左边的4个字符 列: SELECT LEFT(201809,4) 年 结果:2018 2.right(name,2)截取右边的2个字符 SELECT RIGHT(201 ...

  7. mysql查询一周内数据并分组_mysql 统计本周7天的数据并分组

    今天写到项目的一个数据展示模块,最终要呈现的效果是用柱状图显示本周七天的访客数量,所以要给前端本周7天的数据 比如今天是周二(实际上也是),我们要给前端周一周二的数据,后面周三到周日因为还没到,数据置 ...

  8. mysql查询同一年入职的_按年份统计入职人数sql语句

    按年份统计入职人数sql语句 /* 员工编号 部门 入职时间 离职时间(离职空值即没有请辞) 123 00 20050203 20070101 124 00 20071231 20080504 125 ...

  9. MySQL统计同比环比SQL

    大体思路: MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份.月份,然后通过left join关联时间字段去计算环比.同比公式即可 原始表结构: 求同比SQL ...

  10. 大数据比较 同比与环比的区别

    https://www.xiaozhuvideo.com/pages/90246 同比和环比的区别 环比所表示连续2个统计周期内的量的变化比,它反映的是本期比上期增长了多少.而同比一般情况下是今年第n ...

最新文章

  1. asp access的安全:不要认为简单的改后缀mdb为asp就能防下载
  2. GIPC2018年度中国专利代理十强
  3. SAP License:SAP中的一些扩展表
  4. java输入文件名_java输入输出---读取文件名
  5. 独立游戏佳作分享-001(FEZ、Braid、Super Meat Boy)
  6. 财务分析报表APP的功能优势
  7. 旋转式光电编码器的设计动向
  8. 矩阵快速幂 算法原理
  9. 用html+css制作简单好看的登陆注册界面
  10. Flutter AspectRatio 宽高比设定
  11. Keil 编译显示变量重复定义问题
  12. 【新书速递】Unity AR/VR 开发必知必会
  13. 安装gfortran
  14. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(4)
  15. Android界面布局练习
  16. 波束形成 基于对角加载的稳健自适应波束形成
  17. 【小白学JAVA】QQ第三方登陆Demo
  18. ./configure make make install 编译安装和卸载 (Linux)
  19. 外延生长在GaAs衬底上的 Fez0 单晶薄膜-供应压铸铝合金表面耐蚀性银基非晶/易降解的镀铝/顶层金属薄膜定制
  20. 【数据结构】链表其实并不难 —— 手把手带你实现双向链表

热门文章

  1. magicbook屏幕_荣誉Magicbook 15降压笔记本电脑的最佳爆炸现在
  2. win10计算机怎么拨号上网,Win10怎么设置自动连接宽带_Win10怎么设置自动拨号连接上网-192路由网...
  3. 两个tplink路由器有线桥接_TP-Link路由器的有线桥接图解
  4. 32768强制转换成short类型和char类型为什么是-32768和0?
  5. FTP无法在资源管理器中打开
  6. Python爬虫——查询英语四、六级成绩
  7. python逆时针画圆_python 逆时针
  8. ctfshow 做题 MISC入门 模块 11-20
  9. 个人学习笔记---Linux内存:内存管理的实质
  10. 2019JAVA面试题精粹附答案