CASE WHEN用法

1.第一种

case when 条件 then 1 else 0 end 这种形式

例子:比如说有一个表,如下:

需求:

1.查询全部数量

2.查询status值为1的数量

3.查询status值为2的数量

4.查询status值为3或者4的数量

5.查询status值为4的数量

6.查询非常满意的总分数(总数量*100)

7.查询满意的总分数(总数量*60)

8.查询不满意的总分数(总数量*0)

上面8个需求用一条sql语句写出来:

SELECT
    count(1) allCount,
    sum(CASE WHEN t.`status`= 1  THEN 1 ELSE 0 END) daiCount,
    sum(CASE WHEN t.`status`= 2  THEN 1 ELSE 0 END) zhengCount,
    SUM(CASE when t.`status` = 3 OR t.`status` = 4 THEN 1 ELSE 0 END) yiCount,
    sum(CASE WHEN t.`status`= 4  THEN 1 ELSE 0 END) fourCount,
    SUM(case WHEN t.`status` = 4 AND t.`apprasial` = 1 THEN 1 ELSE 0 END) * 100 fcmyScore,
    SUM(CASE WHEN t.`status` = 4 AND t.`apprasial` = 2 THEN 1 ELSE 0 END) * 60 myScore,
    SUM(CASE WHEN t.`status` = 4 AND t.`apprasial` = 3 THEN 1 ELSE 0 END) * 0 bmyScore
    FROM `heat_worksheet` t

then 1 else 0可以这么理解符合条件就返回一次1 不符合条件就返回0,然后sum函数来统计数量

第二种

case when 条件 then 值

when 条件 then 值

when 条件 then 值

when 条件 then 值

.........

when 条件 then 值 else 0 end 字段名

有如下表:

0

需求:

  如果step_name值是1显示开始,2显示录入签约信息负责人........

sql应该这样写:

select
    `id`,
    `mark_code`,
    `mark_name`,
    CASE WHEN `step_name`= 1  THEN '开始'
    WHEN `step_name`= 2  THEN '录入签约信息负责人'
    WHEN `step_name`= 3  THEN '初检派单负责人'
    WHEN `step_name`= 4  THEN '录入初检结果负责人'
    WHEN `step_name`= 5  THEN '初装派单负责人'
    WHEN `step_name`= 6  THEN '录入初装结果负责人'
    WHEN `step_name`= 7  THEN '初装验收负责人'
    WHEN `step_name`= 8  THEN '节能改造派单负责人'
    WHEN `step_name`= 9  THEN '录入节能改造结果负责人'
    WHEN `step_name`= 10  THEN '节能改造验收负责人' ELSE 0 END step_name,
    `processing_person`,
    date_format(`arrival_time`,'%x-%m-%d %H:%i:%S') arrival_time,
    date_format(`complete_time`,'%x-%m-%d %H:%i:%S') complete_time,
    `operating`,
    `after_processing_installation_order_status`,
    `sort`
    FROM
    from installation_order_process

end step_name不能去掉 ,前面的else 0可以去掉

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值