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可以去掉