MySQL统计同比环比SQL
MySQL没有类似oracle方便的统计函数,只能靠自己去硬计算:通过时间字段直接增加年份、月份,然后通过left join关联时间字段去计算环比、同比公式即可
原始表结构:
求同比SQL:
- -- 按年同比
- 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
-- 按年同比 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
FROMksh_tgyjy_llxgyjydlxxt
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
FROMksh_tgyjy_llxgyjydlxxt
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:
- -- 按月同比
- 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 YoY
- FROM (
- 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_llxgyjydlxxt - 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_llxgyjydlxxt - GROUP BY t.
linename,t.tyear,t.tmonth,t.linename) t1 - ) t4
- ON t3.YearMonth = t4.lastYearMonth
- AND t3.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 YoY
FROM (
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
FROMksh_tgyjy_llxgyjydlxxt
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
FROMksh_tgyjy_llxgyjydlxxt
GROUP BY t.linename,t.tyear,t.tmonth,t.linename) t1
) t4
ON t3.YearMonth = t4.lastYearMonth
AND t3.linename = t4.linename
) t5
查询结果:
MySQL统计同比环比SQL的更多相关文章
- mysql统计类似SQL语句查询次数
mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev ...
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 如何查找MySQL中查询慢的SQL语句(转载)
转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...
- 何在mysql查找效率慢的SQL语句?
如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- 数据库MySQL经典面试题之SQL语句
数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学 ...
- MySQL统计信息简介
作者:王小龙@网易乐得DBA 原文地址: http://mp.weixin.qq.com/s/698g5lm9CWqbU0B_p0nLMw MySQL执行SQL会经过SQL解析和查询优化的过程,解析器 ...
- Mysql统计每年每个月的数据——详细教程
Mysql统计每年每个月的数据(前端页面统计图实现) 最终想实现的效果图,在这里就不多废话了,直接上效果图,由于测试数据有几个月是为0的,所以数据图看着会有点怪怪. 接下来是数据库的两个表,这里直接给 ...
- MySQL性能优化(四):SQL优化
原文:MySQL性能优化(四):SQL优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ ...
随机推荐
- [Array] 561. Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...
- Ionic JPush极光推送 插件实例
1.需要去这里注册https://www.jiguang.cn 注册成功获取AppKey 备注填写应用包名规范点,在项目还要用那 2.创建ionic 项目 指定你注册时候的包名(假如:com.ioni ...
- mac 将本地文件上传到vps
打开mac终端 假设通过ssh连接远程vps命令为. ssh root@194.10.10.23 -p92322 (说明:92322表示端口号,一般vps端口号默认是22) 那么复制本地文件到终端的命 ...
- message d:\WEB_APP_QuChongFu\file\五月.xlsx (文件名、目录名或卷标语法不正确。)
原因是 文件名或文件夹名中不能出现以下字符:\ / : * ? " < > | 但是后台读取到的附件的文件路径就是这样的 网上大佬说了,这样处理 rep ...
- Lab2 内存管理(实现细节)
lab2 中的变动 bootloader 的入口发生了改变 bootloader不像lab1那样,直接调用kern_init函数,而是先调用位于lab2/kern/init/entry.S中的kern ...
- 凸优化 & 1概念
---恢复内容开始--- 放射集合 系数之和为1 相加仍然能在集合内,就是 纺射集合 子空间加一个常熟 就是纺射集合 , 例题2.1 一类特殊的线性方程组的解可以看作纺射 集合 纺射包 aff C 是 ...
- MySQL 开启远程访问权限 | 宝塔系统
1.进入 MySQL 管理菜单 2.选择权限为所有人
- CSS制作的32种图形效果[梯形|三角|椭圆|平行四边形|菱形|四分之一圆|旗帜]
转载链接:http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet 前面在<纯CSS制作的图形效果>一文中介绍了十六种CSS画各种不 ...
- Djngo 请求的生命周期
1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...
- vue-cli3 搭建的前端项目基础模板
基于 vue-cli3 搭建的前端模板,fork 或 clone 本仓库,即可搭建完成一个新项目的基础模板,源码地址,欢迎 star 或 fork 特性 CSS 预编译语言:less Ajax: ax ...