MySQL的判断语句的累加操作

前言

今天遇到一个以前没见过的问题,需要对月份进行判断,然后进行一个求和操作,自己以前没有遇到过此类问题,所以在群里询问了各类大佬,最后终于解决了问题,虽然不是很难,但是也学到的新的东西,在此做一个记录。

好了,言归正传,上问题!

筛选xx表   A类+四大领域+1-上个月税后应收汇总

在这个问题中,需要根据当前月份进行判断,然后将1到该月的数据进行累加汇总操作。
所以此问题的解决方法如下:

SELECT
  CASE
  WHEN MONTH (CURRENT_DATE()) = 1 THEN IFNULL(SUM(a.january),0)
  WHEN MONTH (CURRENT_DATE()) = 2 THEN IFNULL(SUM(a.january+a.february),0)
  WHEN MONTH (CURRENT_DATE()) = 3 THEN IFNULL(SUM(a.january+a.february+a.march),0)
  WHEN MONTH (CURRENT_DATE()) = 4 THEN IFNULL(SUM(a.january+a.february+a.march+a.april),0)
  WHEN MONTH (CURRENT_DATE()) = 5 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may),0)
  WHEN MONTH (CURRENT_DATE()) = 6 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june),0)
  WHEN MONTH (CURRENT_DATE()) = 7 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july),0)
  WHEN MONTH (CURRENT_DATE()) = 8 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august),0)
  WHEN MONTH (CURRENT_DATE()) = 9 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september),0)
  WHEN MONTH (CURRENT_DATE()) = 10 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october),0)
  WHEN MONTH (CURRENT_DATE()) = 11 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october+a.november),0)
  WHEN MONTH (CURRENT_DATE()) = 12 THEN IFNULL(SUM(a.january+a.february+a.march+a.april+a.may+a.june+a.july+a.august+a.september+a.october+a.november+a.december),0)
  ELSE
  0
  END
FROM project a
WHERE a.type='A' and a.`year`='2020'

在该语句中,通过case when操作判断该月份为第几个月,然后加上对应的月份,最后通过sum求和得到结果。
同时通过IFNULL来判断列是否为null,如何为null则返回0,进行一个判空处理。

以上就是自己所遇到问题的解决方法,该sql语句中没有考虑性能的问题,如果有更好的处理方法,希望给给予指正,谢谢各位!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值