业务需求描述:
现有核减费用表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;
执行结果如下:
分解问题,逐步实现,不要慌!