业务需求描述:
现有核减费用表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;执行结果如下:
分解问题,逐步实现,不要慌!
本文详细介绍了一种针对特定业务场景的SQL查询方法,通过案例分析,展示了如何使用CASE语句结合分组和子查询,精确计算不同类型的核减费用,并最终汇总得到服务号为102701的业务总核减费用。


1089

被折叠的 条评论
为什么被折叠?



