zoukankan      html  css  js  c++  java
  • MySQL统计同比环比SQL

    大体思路:

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

    原始表结构:



    求同比SQL:

    1. -- 按年同比  
    2.   
    3. SELECT t5.*, CASE WHEN t5.last_energy_year IS NULL OR t5.last_energy_year =0 THEN 0.00  
    4.                 ELSE FORMAT(((t5.energy_year - t5.last_energy_year)/t5.last_energy_year)*100,2)   
    5.         END YoY  -- 同比  
    6. FROM (   
    7.    SELECT t3.*,t4.last_energy_year  
    8.     FROM   
    9.     (  
    10.        SELECT DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d'AS YearMonth,t1.tyear,SUM(t1.energy_month) energy_year,t1.linename  
    11.         FROM(SELECT   
    12.         t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot   
    13.         FROM `ksh_tgyjy_llxgyjydlxx` t   
    14.         GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1  
    15.         GROUP BY t1.tyear,t1.`linename`  
    16.      ) t3   
    17.       LEFT JOIN   
    18.     (  
    19.       SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.`tyear`, '-', t1.`tmonth`,'-01'),'%Y-%m-%d'),INTERVAL 1 YEARAS lastYearMonth,t1.tyear,SUM(t1.energy_month) last_energy_year,t1.linename  
    20.         FROM(SELECT t.*,COUNT(DISTINCT t.`tyear`,t.`tmonth`,t.`linename`) c_cot   
    21.         FROM `ksh_tgyjy_llxgyjydlxx` t   
    22.         GROUP BY t.`linename`,t.`tyear`,t.`tmonth`,t.`linename`) t1  
    23.         GROUP BY t1.tyear,t1.`linename`  
    24.     ) t4  
    25.     ON t3.YearMonth = t4.lastYearMonth  
    26.     AND t3.linename = t4.linename   
    27. ) t5  

    查询结果:


    求月环比SQL:

    1. -- 按月同比  
    2.   
    3. SELECT DATE_FORMAT(t5.YearMonth,'%Y-%m') YearMonth,t5.linename,t5.energy_month,   
    4.          CASE WHEN t5.lat_energy_month IS NULL OR t5.lat_energy_month=0 THEN 0.00  
    5.                  ELSE FORMAT(((t5.energy_month - t5.lat_energy_month)/t5.lat_energy_month)100,2)   
    6.         END YoY  
    7. FROM (   
    8.    SELECT t3.,t4.energy_month lat_energy_month  
    9.      FROM   
    10.     (  
    11.       SELECT DATE_FORMAT(CONCAT(t1.tyear'-', t1.tmonth,'-01'),'%Y-%m-%d'AS YearMonth,t1.  
    12.         FROM(SELECT   
    13.           t.,COUNT(DISTINCT t.tyear,t.tmonth,t.linename) c_cot   
    14.           FROM ksh_tgyjy_llxgyjydlxx t   
    15.           GROUP BY t.linename,t.tyear,t.tmonth,t.linename) t1  
    16.      ) t3   
    17.        LEFT JOIN   
    18.     (  
    19.       SELECT DATE_ADD(DATE_FORMAT(CONCAT(t1.tyear'-', t1.tmonth,'-01'),'%Y-%m-%d'),INTERVAL 1 YEARAS lastYearMonth,t1.   
    20.         FROM(SELECT t.*,COUNT(DISTINCT t.tyear,t.tmonth,t.linename) c_cot   
    21.         FROM ksh_tgyjy_llxgyjydlxx t   
    22.         GROUP BY t.linename,t.tyear,t.tmonth,t.linename) t1  
    23.     ) t4  
    24.     ON t3.YearMonth = t4.lastYearMonth  
    25.     AND t3.linename = t4.linename  
    26. ) t5  

    查询结果:



  • 相关阅读:
    Linux之文件处理命令
    Linux基础命令
    rip实验
    Linux基础之磁盘分区
    mysql安装
    centos Apache、php、mysql默认安装路径
    You probably tried to upload too large file. Please refer to documentation for ways to workaround this limit.
    Wrong permissions on configuration file, should not be world writable!
    机器会学习么 学习总结
    实验 5 Spark SQL 编程初级实践
  • 原文地址:https://www.cnblogs.com/jpfss/p/8759207.html
Copyright © 2011-2022 走看看