码迷,mamicode.com
首页 > 数据库 > 详细

Mysql oracle casewhen 完美应用

时间:2018-10-06 12:07:11      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:acl   mysql   var   varchar2   sum   case   经理   number   表达式2   

使用SQL99标准通用语法中的case表达式,将职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400
1;

case 字段
     when 条件1 then 表达式1
     when 条件2 then 表达式2
     else 表达式n
end

select ename "姓名",job "职位",sal "涨前工资",
       case job
        when ‘ANALYST‘ then sal+1000
        when ‘MANAGER‘ then sal+800
            else sal+400
       end "涨后工资"
from emp;

2搜索函数

CASE
WHEN sex = ‘1‘ THEN ‘男‘  
WHEN sex = ‘2‘ THEN ‘女‘  
ELSE ‘其他‘ END

案例其中 count可以换成sum

SELECT
       COUNT(CASE WHEN e.sex=1 THEN 1 END) "男",
       COUNT(CASE WHEN e.sex=2  THEN 1 END) "女"
      
    FROM emp e;

案例

/*
笔试题3:有一个员工表empinfo结构如下
      create table empinfo(
    fempno    varchar2(10) primary key,
    fempname varchar2(20) not null,
        fage number(2) not null,
        fsalary number(10,2) not null
      );
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘1‘,‘AA‘,30,7000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘2‘,‘BB‘,31,8000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘3‘,‘CC‘,32,9000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘4‘,‘DD‘,33,10000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘5‘,‘EE‘,34,11000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘6‘,‘FF‘,35,12000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘7‘,‘GG‘,36,13000);
      insert into empinfo(fempno,fempname,fage,fsalary) values(‘8‘,‘FF‘,37,14000);

      假如该表有大约1000万条记录,写一句最高效的SQL语句,计算以下4种人中每种员工的数量
      第1种人:fsalary>9999 and fage>35
      第2种人:fsalary>9999 and fage<35
      第3种人:fsalary<9999 and fage>35
      第4种人:fsalary<9999 and fage<35
     
      提示:只用一条SQL搞定
*/

    select
       sum(case when e.fsalary>9999 and e.fage>35 then 1 else 0 end) "第1种人",
       sum(case when e.fsalary>9999 and e.fage<35 then 1 else 0 end) "第2种人",
       sum(case when e.fsalary<9999 and e.fage>35 then 1 else 0 end) "第3种人",
       sum(case when e.fsalary<9999 and e.fage<35 then 1 else 0 end) "第4种人"
    from empinfo e;

Mysql oracle casewhen 完美应用

标签:acl   mysql   var   varchar2   sum   case   经理   number   表达式2   

原文地址:https://www.cnblogs.com/zhengfujava/p/9746740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!