Mysql 应用CASE WHEN 语句条件计算的一个实例

业务需求描述:

现有核减费用表edu_syn_hd_ded(ID  SERVICECODE   CUTTYPE   CUTFEE )

列定义:ID  服务号   核减类型    核减费用。

有核减规则:

1. 类型是01的,核减费用要除以0.35的比例,

2. 其他类型的,不用做处理直接计算

现需要:需要统计服务号为 102701 的业务的核减总费用

分析:

首先考虑如果没有条件时该如何计算,那么直接是按服务号聚集来计算SUM:

select SERVICECODE, SUM(CUTFEE)
           from edu_syn_hd_ded
           where
           SERVICECODE = '102701'
           group by SERVICECODE 

那么,现在考虑加入核减类型,需要使用CUTFEE分别求出实际的金额(按类型来处理,除以100是换算单位 分 到 元 ):

select CUTTYPE,SERVICECODE,
          (case
              when CUTTYPE = '01'
                then ifnull(round(sum(CUTFEE) / 0.35 / 100, 2), 0)
              else 
                ifnull(sum(CUTFEE) / 100, 0)
              end
              )as allcount

           from edu_syn_hd_ded
           where
           SERVICECODE = '102701'
           group by SERVICECODE, CUTTYPE

执行结果如图:

可以看到按照类型,我们已经得到了相应的金额。

接下来只要把查询结果相加即可,外层包一个查询:

select sum(allcount) from (select CUTTYPE,SERVICECODE,
          (case
              when CUTTYPE = '01'
                then ifnull(round(sum(CUTFEE) / 0.35 / 100, 2), 0)
              else 
                ifnull(sum(CUTFEE) / 100, 0)
              end
              )as allcount

           from edu_syn_hd_ded
           where
           SERVICECODE = '102701'
           group by SERVICECODE, CUTTYPE) temp;

执行结果如下:

分解问题,逐步实现,不要慌!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值