case when then else end SQL用法

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 )

 

posted on 2019-08-20 16:01  UnmatchedSelf  阅读(743)  评论(0编辑  收藏  举报

导航