sql求解mysql中的max 跟case when联合
sql如下
MAX(CASE repaymentStatus WHEN '20' THEN urgeNum ELSE 0 END ) urgeSuccessNum,
这个max我感觉一点用没有 各位有用吗。
select sts.cusServerId,sts.name,sts.urgeTeamName,sum(sts.urgeNum) urgeNum,
MAX(CASE Status WHEN '20' THEN urgeNum ELSE 0 END ) urgeSuccessNum,
MAX(CASE Status WHEN '20' THEN urgeSuccessAmount ELSE 0 END ) urgeSuccessAmount,
MAX(CASE repaymentStatus WHEN '20' THEN urgeNum ELSE 0 END )/sum(sts.urgeNum) urgeSuccessRate
from (
select a.col_admin_id cusServerId,f.roleid urgeTeamName,a.col_admin_name name,count(1) urgeNum,
a.repayment_status repaymentStatus,sum(a.already_repayment_amount) urgeSuccessAmount
from t_loan_apply_record a left join t_uac_user f on a.col_admin_id = f.id
where exists (select 1 from t_loan_col_record b where a.id = b.apply_id)
<if test='dateTo!=null and dateTo!=""'>
AND a.release_time <![CDATA[<= #{dateTo} ]]>
</if>
group by a.col_admin_id,repayment_status
) sts group by sts.cusServerId
是否有更优的解决效果不谈,就本身sql来讲,是有用的。
MAX(CASE Status WHEN '20' THEN urgeNum ELSE 0 END ) urgeSuccessNum,
理解为如果 Status为20,那么效果等同于MAX(urgeNum)结果为urgeNum的最大值,否则计算MAX(0),结果为0
这句话的意思是,如果字段repaymentStatus
的值为20
则计算urgeNum
这一列的最大值,否则计算0
这一列的最大值,也就是否则情况下,不计算最大值,注意case when他在里面决定了计算那一列,仔细看就会发现2种情况计算的列不一样,所以此max必须要,若去除则程序必然达不到预期结果!
我的理解是,这条sql语句对cusServerId去重了,并且当status值为20查出了usgeNum的最大值,至于目的要结合具体场景看
max获取 CASE Status WHEN '20' 之中的最大值
去数据库测试一下就好了啊
select A.cusServerId,A.name,A.urgeTeamName,A.urgeNum,MAX(A.urgeSuccessNum),MAX(A.urgeSuccessAmount),MAX(A.urgeSuccessRate)/A.urgeNum
from(
select sts.cusServerId,sts.name,sts.urgeTeamName,sum(sts.urgeNum) urgeNum,
CASE Status WHEN '20' THEN urgeNum ELSE 0 END as urgeSuccessNum,
CASE Status WHEN '20' THEN urgeSuccessAmount ELSE 0 END as urgeSuccessAmount,
CASE repaymentStatus WHEN '20' THEN urgeNum ELSE 0 END as urgeSuccessRate
from (
select a.col_admin_id cusServerId,f.roleid urgeTeamName,a.col_admin_name name,count(1) urgeNum,
a.repayment_status repaymentStatus,sum(a.already_repayment_amount) urgeSuccessAmount
from t_loan_apply_record a left join t_uac_user f on a.col_admin_id = f.id
where exists (select 1 from t_loan_col_record b where a.id = b.apply_id)
AND a.release_time
group by a.col_admin_id,repayment_status
) sts group by sts.cusServerId
) A group by A.cusServerId,A.name,A.urgeTeamName,A.urgeNum
干嘛不这么写呢