• Oracle Case When


    --测试数据准备
    
    -- 建表  
    create table student(
    stu_id varchar2(4),
    stu_name varchar2(100), --姓名
    sex varchar2(1),  --性别 1 男  2 女  0 未知
    credit integer default 0
    );
    
    -- 插入数据
    insert into student (stu_id, stu_name, sex, credit) values ('0001', '大王', '2', '83'); 
    insert into student (stu_id, stu_name, sex, credit) values ('0002', '刘一', '1', '85'); 
    insert into student (stu_id, stu_name, sex, credit) values ('0003', '陈二', '2', '86');
    insert into student (stu_id, stu_name, sex, credit) values ('0004', '张三', '0', '77');
    insert into student (stu_id, stu_name, sex, credit) values ('0005', '李四', '1', '74');
    insert into student (stu_id, stu_name, sex, credit) values ('0006', '王五', '0', '73');
    insert into student (stu_id, stu_name, sex, credit) values ('0007', '赵六', '1', '65');
    insert into student (stu_id, stu_name, sex, credit) values ('0008', '孙七', '2', '69');
    insert into student (stu_id, stu_name, sex, credit) values ('0009', '周八', '2', '79');
    insert into student (stu_id, stu_name, sex, credit) values ('0010', '吴九', '1', '55');
    insert into student (stu_id, stu_name, sex, credit) values ('0011', '郑十', '1', '76');
    
    --为了测试数据,没有控制主键唯一性
    insert into student (stu_id, stu_name, sex, credit) values ('0001', '大王', '2', '83'); 
    insert into student (stu_id, stu_name, sex, credit) values ('0002', '刘一', '1', '85'); 
    insert into student (stu_id, stu_name, sex, credit) values ('0002', '刘一', '', '85'); 
    commit;
    
    --case when 使用表达式确定返回值
    
    --一、casewhen语法---------------------------------
    --1.简单Case函数  
    select case sex
             when '1' then '男'
             when '2' then '女'
             else '其他' 
            end as sex
      from student;
    --2.Case搜索函数  
    select case 
             when sex = '1' then  '男'
             when sex = '2' then '女'
             else  '其他' 
            end as sex
      from student;
      
    --3.表达式函数和搜索函数比较-----------------------------
    --搜索函数可以识别到空值
    select case 
             when sex is null  then  '男'
             when sex = '2' then '女'
             else  '其他' 
            end as sex
      from student where stu_name = '刘一';
    
    --表达式函数无法识别到空值  
    select case sex
             when null then '男'
             when '2' then '女'
             else '其他' 
            end as sex
      from student where stu_name = '刘一';
    --3.表达式函数和搜索函数比较-----------------------------
    --一、casewhen语法---------------------------------
    
      
    --二、Case函数执行顺序,只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
    
    --①有排序关系的,可以按照升序关系排序
    select stu_id, credit,
           case
             when credit < 80 then '良好'
             when credit < 100 then '优秀'
           end
      from student;
    --② 使用降序排序永远也不可能得到想要的结果,也可以说这种写法是错误的 
    select stu_id,credit,
           case
             when credit < 100 then '优秀'
             when credit < 80 then '良好'         
           end
      from student;
    
    --③ ①写法等价于③,②是一个错误的例子
    select stu_id,credit,
           case
             when credit < 100 and credit >= 80 then '优秀'
             when credit < 80 then '良好'         
           end
      from student;
      
    --二、Case函数执行顺序,只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
    
    
    
    --三、case函数功能测试--------------------------------------------------------
    
    --1.放在select中统计某一大类下面的另一个分类下的数据---------------
    select credit,
           count(case when sex = 1 then 1 else null end) 男生数,
           count(case when sex = 2 THEN 1 else null end) 女生数
      from student
     group by credit;
    --1.放在select中统计某一大类下面的另一个分类下的数据---------------
    
    --2.放在where中对某一类信息作出限制------------
    select *
      from student
     where (case
              when sex = 1 then '性别明确'
              when sex = 2 THEN '性别明确'
              else  '性别不明确'
             end) = '性别不明确';
    --2.放在where中对某一类信息作出限制------------
    
    
    --3.放在group by后面对某一类信息进行分类-------------------------
    select case
             when credit < 80 then '良好'
             when credit < 100 then '优秀'
           end distinction,
           count(*)
      from student
     group by case
                when credit < 80 then '良好'
                when credit < 100 then '优秀'
              end;
    --3.放在group by后面对某一类信息进行分类-------------------------
        
    --三、case函数功能测试--------------------------------------------------------
    

      

  • 相关阅读:
    java的学习笔记
    tomcat配置方法
    《编写高质量代码》学习笔记
    Servlet的学习笔记
    Http协议的学习笔记
    树莓派开箱使用分享以及一些心得
    树莓派的骚操作
    Linux的学习笔记
    msyql高级的学习笔记
    项目业务记录
  • 原文地址:https://www.cnblogs.com/wangrui1587165/p/9999961.html
Copyright © 2020-2023  润新知