关于case when复杂sql语句查询

问题描述:
需要查询出学生在不同流程状态对应的活动个数,流程状态分为五个状态audit、havePass、notPass、reject、giveup;活动有社会活动(xg_credit_comm_activity_apply)、比赛活动(xg_credit_innov_match_apply)、培训活动(xg_credit_innov_train_apply)。

需要得到的效果:
这里写图片描述

SQL拼接步骤:
Step1: 统计学生在所有活动中不同流程状态对应的活动个数

SELECT student_id,`status`,COUNT(*) as counts from (
  SELECT student_id, `status` from xg_credit_comm_activity_apply 
  UNION ALL 
 SELECT student_id, `status` from xg_credit_innov_match_apply 
  UNION ALL 
 SELECT student_id,`status` from xg_credit_innov_train_apply 
    )as t GROUP BY t.student_id, t.`status`

这里写图片描述

Step2:

SELECT t1.student_id as stuId,
CASE when t1.`status`='AUDIT' then t1.counts ELSE 0 END as audit,
CASE when t1.`status`='HAVEPASS' then t1.counts ELSE 0 END as havePass,
CASE when t1.`status`='NOTPASS' then t1.counts else 0 END as notPass,
CASE when t1.`status`='REJECT' then t1.counts else 0 END as reject,
CASE when t1.`status`='GIVEUP' then t1.counts else 0 END as giveup
 from (

SELECT student_id,`status`,COUNT(*) as counts from (

SELECT student_id, `status`  from xg_credit_comm_activity_apply 
UNION ALL
SELECT student_id, `status` from xg_credit_innov_match_apply 
UNION ALL
SELECT student_id,`status` from xg_credit_innov_train_apply 

 )as t GROUP BY t.student_id, t.`status`

)as t1

这里写图片描述

Step3:

SELECT stuId, SUM(audit) as audit,SUM(havePass) as havePass, SUM(notPass) as notPass, SUM(reject) as reject, SUM(giveup) as giveup from (

SELECT t1.student_id as stuId,
CASE when t1.`status`='AUDIT' then t1.counts ELSE 0 END as audit,
CASE when t1.`status`='HAVEPASS' then t1.counts ELSE 0 END as havePass,
CASE when t1.`status`='NOTPASS' then t1.counts else 0 END as notPass,
CASE when t1.`status`='REJECT' then t1.counts else 0 END as reject,
CASE when t1.`status`='GIVEUP' then t1.counts else 0 END as giveup
 from (

SELECT student_id,`status`,COUNT(*) as counts from (

SELECT student_id, `status`  from xg_credit_comm_activity_apply 
UNION ALL
SELECT student_id, `status` from xg_credit_innov_match_apply 
UNION ALL
SELECT student_id,`status` from xg_credit_innov_train_apply 

 )as t GROUP BY t.student_id, t.`status`

)as t1

)as  t2 GROUP BY t2.stuId

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值