SQL之case when then用法详解


case具有两种格式。简单case函数和case搜索函数。

1 --简单case函数  2 case sex 3 when '1' then '' 4 when '2' then '女’ 5  else '其他' end 6 --case搜索函数 7 case when sex = '1' then '' 8  when sex = '2' then '' 9  else '其他' end

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

 

实例演示:
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:

ID        NAME                 SEX
---------- -------------------- ----------
1          张一                 
2          张二                 1
3          张三                 
4          张四                
5          张五                 2
6          张六                 1
7          张七                 2
8          张八                 1

1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
1 select u.id,u.name,u.sex, 2   (case u.sex 3    when 1 then ''  
4    when 2 then ''  
5    else '空的'  
6    end  
7    )性别 8 from users u;
ID NAME                        SEX 性别
--------------------------------------- 
1 张一                              空的
2 张二                          1   男
3 张三                              空的
4 张四                              空的
5 张五                          2   女
6 张六                          1   男
7 张七                          2   女
8 张八                          1   男

 

2. 将sum与case结合使用,可以实现分段统计。
    如果现在希望将上表中各种性别的人数进行统计,sql语句如下:

 1 select
 2   sum(case u.sex when 1 then 1 else 0 end) 男性,  3   sum(case u.sex when 2 then 1 else 0 end) 女性,  4   sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空  5 from users u;  6  
 7  男性 女性 性别为空  8 ---------- ---------- ----------
 9          3        2          0
10 
11 --------------------------------------------------------------------------------
12 select
13   count(case when u.sex=1 then 1 end)男性, 14   count(case when u.sex=2 then 1 end)女, 15   count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空 16 from users u; 17  
18  男性 女 性别为空 19 ---------- ---------- ----------
20        3          2          0

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM