聚合(CaseWhen(聚合)) 解决方案


select UnsubmittedCount = (case when ApproveStatus in ('未提交''已提交'then count(FormID) end),

ApprovedCount = ( case  when  ApproveStatus  in  ( '已审核' then  count (FormID)  end )
from  formLogistic
group  by  ApproveStatus

返回结果集为GroupBy后的多行数据,如何避开GroupBy?

可以使用max()或者sum()的方式,将casewhen一行化,如:

select  UnsubmittedCount =  max ( case  when  ApproveStatus  in  ( '未提交' '已提交' then  count (FormID)  end
from  formLogistic
group  by  ApproveStatus

但:聚合(CaseWhen(聚合)) 这种模式的查询方式,

会报一个错误:不能对包含聚合或子查询的表达式执行聚合函数。



可以优化为:
select  UnsubmittedCount =  COUNT ( case  when  ApproveStatus  in  ( '未提交' '已提交' then  FormID  end ),
ApprovedCount =  COUNT ( case  when  ApproveStatus  in  ( '已审核' then  FormID  end )
from  formLogistic


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CASE WHEN语句在MySQL中可以用来实现类似于Java中的switch...case的功能。可以通过嵌套多个CASE WHEN语句来实现更复杂的逻辑判断。在给出的引用和引用中,都展示了使用CASE WHEN套CASE WHEN的例子。 首先,让我们看一个简单的例子,引用中的示例代码: SELECT CASE WHEN ISNULL(work_order_no) THEN (CASE WHEN 2 > 1 THEN 11 ELSE 22 END) ELSE (CASE WHEN 1 > 0 THEN 33 ELSE 66 END) END FROM qk_20030102 WHERE work_order_no = 'GD0000070324' 这个例子中,首先判断work_order_no是否为空,如果为空,则进入内层的CASE WHEN语句进行判断。如果2大于1,则返回11,否则返回22。如果work_order_no不为空,则进入外层的CASE WHEN语句进行判断。如果1大于0,则返回33,否则返回66。 类似地,我们可以看引用中的实际使用例子: SELECT work_order_no, CASE WHEN UNIX_TIMESTAMP(STR_TO_DATE(chuangjian_time, '%Y-%m-%d %H:%i:%s')) > UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(substring(chuangjian_time, 1, 10), "18:00:00"), '%Y-%m-%d %H:%i:%s')) THEN (CASE WHEN UNIX_TIMESTAMP(STR_TO_DATE(substring(chuangjian_time, 1, 10), '%Y-%m-%d %H:%i:%s')) 124200 >= UNIX_TIMESTAMP(STR_TO_DATE(yuyue_opt_time, '%Y-%m-%d %H:%i:%s')) THEN 1 ELSE 0 END) ELSE (CASE WHEN UNIX_TIMESTAMP(STR_TO_DATE(assign_time, '%Y-%m-%d %H:%i:%s')) 5400 >= UNIX_TIMESTAMP(STR_TO_DATE(yuyue_opt_time, '%Y-%m-%d %H:%i:%s')) THEN 1 ELSE 0 END) END FROM qk_20030102 在这个例子中,根据时间戳的比较结果,进入不同的内层CASE WHEN语句。如果满足条件,返回1,否则返回0。 综上所述,以上是关于CASE WHEN套CASE WHEN的解释和示例。根据具体情况,可以嵌套多个CASE WHEN语句以满足复杂的逻辑需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值