case when then else end sql用法类似java里面的 if, else if, else,就是判断数据库结果集等于什么,你想让他显示什么结果,话不多说直接看下面。
首先有两种用法:
第一种:
【语法】
CASE 表达式1
WHEN 表达式2 THEN 表达式3
…
WHEN 表达式4 THEN 表达式5
[ELSE 表达式6]
END
解释:
将表达式1的值与各WHEN字句后面的表达式的值进行比较,如果两者相等,则返回THEN后面的值,然后跳出case语句(类似java 逻辑运算符得 if,else if 一旦找到结果相同的就会立马停止往下寻找并且跳出判断),
否则返回ELSE子句中的表达式的值。ELSE子句是可选项,当case语句中不包含else子句时,若所有比较都失败,则case语句
将返回NULL。
【例子】从数据表stud_info中,选取stud_id、grade,如果grade为“男”则输出“M”,如果为“女”输出“F”。
SELECT stud_id,
(CASE gender
WHEN ’男’ THEN ’M’
WHEN ’女’ THEN ’F’
END
) AS SEX
FROM 表
第二种
:
【语法】
CASE WHEN 表达式2 THEN 表达式3
…
WHEN 表达式4 THEN 表达式5
ELSE 表达式6
END
【原理】
首先测试WHEN后的条件表达式的值,如果其值为真,则返回THEN后面的表达式的值,否则测试下一个WHEN子句中的表达式的值,
如果所有WHEN子句后的表达式的值都为假,则返回ELSE后的表达式的值,如果在CASE语句中没有ELSE子句,则CASE表达式返回NULL。
【例子】从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”、小于60分输出“低于60不及格!”、60分至70分输出“60-70分之间成绩很一般!”、
70分至80分输出“成绩大于70小于80成绩较优秀!”、80分到90分输出“成绩优秀80-90分!”大于或等于90分时输出“成绩非常好!”。
SELECT
id,
(
CASE
WHEN
成绩字段
IS NULL THEN
‘缺考’
WHEN 成绩字段< 60 THEN ‘低于60不及格!’
WHEN
成绩字段
BETWEEN 60 AND 70 THEN ’60-70分之间成绩很一般!’
WHEN
成绩字段
BETWEEN 70 AND 80 THEN ‘成绩大于70小于80成绩较优秀!’
WHEN
成绩字段
BETWEEN 80 AND 90 THEN ‘成绩优秀80-90分!’ ELSE ‘成绩非常好!’
END
) AS chengjis
FROM
表
下面看case函数和聚合函数相结合得sql例子:
select
t3.region_id as ‘regionId’,
t3.region_name as ‘regionName’,
count(case when t1.tricolor = 1 then 1 else null end ) as ‘greenTotal’,
count(case when t1.tricolor = 2 then 1 else null end ) as ‘yellowTotal’,
count(case when t1.tricolor = 3 then 1 else null end )as ‘redTotal’
from pa_household_member t1
left join pa_household t2 on t2.household_id = t1.household_id
left join system_region t3 on t3.region_id = t2.area
group by t2.area
要点:
count在套住case when ….. 例如: count (case when ….end )
转载于:https://www.cnblogs.com/ysySelf/p/11383474.html