MySQL 计算环比(同比类似)

目的:

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

1.查看库表

SELECT * FROM data_deal_day WHERE WATER_METER_ID = 592

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

2.计算环比:

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

表a: 表b:

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 #嵌套子查询,必须要有别名

经验分享 程序员 微信小程序 职场和发展