zoukankan      html  css  js  c++  java
  • SQL之case when then用法

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

    --简单case函数
    case sex
            when '1' then ''
            when '2' then '女’
            else '其他' end
    
    --case搜索函数
    case when sex = '1' then ''
         when sex = '2' then ''
         else '其他' end

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

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

    --比如说,下面这段sql,你永远无法得到“第二类”这个结果
    case when col_1 in ('a','b') then '第一类'
         when col_1 in ('a') then '第二类'
         else '其他' end  

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

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

    1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:
    SQL> 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"列,语句如下:

    SQL> 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语句如下:

    SQL> 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
    ========================================================================================== 我希望每一篇文章的背后,都能看到自己对于技术、对于生活的态度。 我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。 其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。 ==========================================================================================
  • 相关阅读:
    java中的工厂模式(简单工厂模式+工厂方法模式)
    代码集合
    java读取文件的路径问题
    使用ZXing库生成二维码
    java设计模式-装饰者模式
    android文件流缓存
    java8 新特性
    Excel导出
    常用的在线工具
    Java加密简介
  • 原文地址:https://www.cnblogs.com/weihuang6620/p/6904722.html
Copyright © 2011-2022 走看看