MySQL 计算同比环比
主要思路 :分别查询出上月的数据为一张表, 本月的数据为一张表使用 left join 连接两张表, 并使用 where 语句酾浚符合条件的数据行使用 case when 语句计算这张联合表相应列的比值, 即为同比环比数据实际语句示例:# 计算同比select s1.id,currDate,currSum currSumFee,prevDate,prevSum prevSumFee,CASE WH
·
主要思路 :
- 分别查询出上月的数据为一张表, 本月的数据为一张表
- 使用 left join 连接两张表, 并使用 where 语句酾浚符合条件的数据行
- 使用 case when 语句计算这张联合表相应列的比值, 即为同比环比数据
实际语句示例:
# 计算同比
select s1.id,currDate,currSum currSumFee,prevDate,prevSum prevSumFee,
CASE WHEN prevSum>0 THEN (currSum-prevSum)/prevSum
ELSE "同期没有数据" END 费用同比
from
(select id ,statistic_date currDate,sum(totalFee) currSum
from billing_statistics where date_format(statistic_date,'%Y-%m') = '2020-11' group by id ) s1
left join
(select id ,statistic_date prevDate,sum(totalFee) prevSum
from billing_statistics where date_format(statistic_date,'%Y-%m') = '2019-11' group by id ) s2
on s1.id=s2.id group by s1.id
说明:
- 其中 currSum 为本期数据, prevSum为上期数据
- FORMAT((currSum-prevSum)/prevSum*100,2) 为保留小数点后两位有效数字
- CONCAT(FORMAT((currSum-prevSum)/prevSum*100,2),’%’) 为拼接函数
- 如果使用 FORMAT或 CONCAT函数, 该列数据类型自动被转为 varchar 类型, 如果需要按照 double类型大小排序, 建议不使用以上两个函数, 同时将 case when 语句中 的 ELSE “同期没有数据” 改为 ELSE 0
参考:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)