MySQL 计算环比(同比类似)

目的:

计算上海市某企业(WATER_METER_ID = 592)在2018.1.1到2018.11.5每个月的用水量,上个月的用水量以及月环比。

1.查看库表

SELECT
            *
 FROM
            data_deal_day
 WHERE
            WATER_METER_ID = 592

MySQL 计算环比(同比类似)_第1张图片

备注:DATA_DATE:水表数据上传日期;READ_SUM:水表读数;USE_SUM:用水量;WATER_METER_ID:用户ID

2.计算环比:

思路:表a首先统计出当月的总用水量,表b统计出上个月的用水量(在a的基础上加一个月,可得到上个月的用水量),将两个表进行左连接。

表a:                                                              表b:

MySQL 计算环比(同比类似)_第2张图片                     MySQL 计算环比(同比类似)_第3张图片

SELECT t.*, 
CASE WHEN 
    t.use_sum_last IS NULL OR t.use_sum_last =0 THEN 0.00  
ELSE 
    FORMAT(((t.use_sum_this - t.use_sum_last)/t.use_sum_last)*100,2) #格式化,保留两位有效数字   
END link_ratio 
FROM 
(
        SELECT
            a.my_ym ,
           FORMAT( a.use_sum ,2) AS use_sum_this, 
            FORMAT(b.use_sum ,2) AS use_sum_last
        FROM 
        (
            SELECT 
                date_format(data_date,'%Y-%m') AS my_ym , #将日期格式转化为“年-月”
                sum(use_sum) AS use_sum
            FROM 
                data_deal_day
            WHERE 
                WATER_METER_ID = 592
            AND
                data_date>= '2018-1-1' 
            AND 
                data_date <= '2018-11-5'
            GROUP BY 
                my_ym
        )    a 
        LEFT JOIN
        (
            SELECT 
                date_format(DATE_ADD(data_date,INTERVAL 1 MONTH ), '%Y-%m') AS my_ym,#DATE_ADD:将data_date日期增加一个月;减少用DATE_SUB
                sum(use_sum) AS use_sum
            FROM 
                data_deal_day
            WHERE 
                WATER_METER_ID = 592
            AND
                data_date>= '2018-1-1' 
            AND 
                data_date <= '2018-11-5'
            GROUP BY
                my_ym
        ) b 
        ON
            a.my_ym = b.my_ym
) t #嵌套子查询,必须要有别名

MySQL 计算环比(同比类似)_第4张图片

你可能感兴趣的:(MySQL基础)