case when then else end SQL用法

  • Post author:
  • Post category:其他


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