sql中case when的用法


本文摘自PHP中文网,作者angryTom,侵删。

sql中case when的用法

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

1、简单case函数

1

2

3

4

case sex

  when '1' then '男'

  when '2' then '女’

  else '其他' end

2、case搜索函数

1

2

3

case when sex = '1' then '男'

     when sex = '2' then '女'

     else '其他' end</span>

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。(免费学习视频教程推荐:mysql视频教程)

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

比如说,下面这段sql,你永远无法得到“第二类”这个结果

1

2

3

case when col_1 in ('a','b') then '第一类'

     when col_1 in ('a') then '第二类'

     else '其他' end

实例演示:

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

1

2

3

4

5

6

7

8

9

10

11

12

select * from users

  

 ID        NAME                 SEX

---------- -------------------- ----------

1          张一                

2          张二                 1

3         张三                

4          张四               

5          张五                 2

6          张六                 1

7          张七                 2

8          张八                 1

1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

select u.id,u.name,u.sex,

   (case u.sex

      when 1 then '男'

      when 2 then '女'

      else '空的'

      end

     )性别

  from users u;

                                    ID NAME                        SEX 性别

--------------------------------------- -------------------- ---------- ------

                                      1 张一                            空的

                                      2 张二                          1 男

                                      3 张三                            空的

                                      4 张四                            空的

                                      5 张五                          2 女

                                      6 张六                          1 男

                                      7 张七                          2 女

                                      8 张八                          1 男

2、如果不希望列表中出现"sex"列,语句如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

select u.id,u.name,

    (case u.sex

      when 1 then '男'

      when 2 then '女'

      else '空的'

      end

    )性别

  from users u;

  

                                     ID NAME                 性别

--------------------------------------- -------------------- ------

                                      1 张一                 空的

                                      2 张二                 男

                                      3 张三                 空的

                                      4 张四                 空的

                                      5 张五                 女

                                      6 张六                 男

                                      7 张七                 女

                                      8 张八                 男

3、将sum与case结合使用,可以实现分段统计。

如果现在希望将上表中各种性别的人数进行统计,sql语句如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

select

    sum(case u.sex when 1 then 1 else 0 end)男性,

    sum(case u.sex when 2 then 1 else 0 end)女性,

    sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空

  from users u;

  

        男性         女性       性别为空

---------- ---------- ----------

         3          2          0

  

--------------------------------------------------------------------------------

SQL> select

    count(case when u.sex=1 then 1 end)男性,

    count(case when u.sex=2 then 1 end)女,

    count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空

  from users u;

  

        男性          女       性别为空

---------- ---------- ----------

         3          2          0

以上就是sql中case when的用法的详细内容,更多请关注木庄网络博客其它文章!

相关阅读 >>

sql触发器之常用语句(总结)

sql模式设置引起的问题解决办法

如何将sql文件导入mysql

查看表结构的sql指令是什么

mysql exists用法小结

如何得到数据库中所有表名 表字段及字段中文描述

详解sql中group by的用法

sql server中with as使用介绍

mysql 案例分析讲解外连接语法

navicat怎么执行sql

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...