zoukankan      html  css  js  c++  java
  • mysql case when then 使用

    建表:
    create table hank (id int,name varchar(20));

    插入数据:
    insert into hank values(1,'A');
    insert into hank values(2,'B');
    insert into hank values(3,'C');

    通过case when then更新数据:
    update hank set name = case id
    when 1 then 'D'
    when 2 then 'E'
    when 3 then 'F'
    end
    where id in(1,2,3);

    sql的意思是,更新name字段,如果id=1 则name的值为D,如果id=2 则 name 的值为E,如果id=3 则 name 的值为F。
    即是将条件语句写在了一起。
    这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行


    表的创建
    CREATE TABLE `lee` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `name` char(20) DEFAULT NULL,
    `birthday` datetime DEFAULT NULL,
    PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8



    数据插入:
    insert into lee(name,birthday) values ('sam','1990-01-01');
    insert into lee(name,birthday) values ('lee','1980-01-01');
    insert into lee(name,birthday) values ('john','1985-01-01');


    第一种用法:
    SELECT name,
    CASE WHEN birthday < '1981' THEN 'old'
    WHEN birthday > '1988' THEN 'yong'
    ELSE 'ok' END YORN
    FROM lee


    第二种用法:
    SELECT NAME, CASE name
    WHEN 'sam' THEN 'yong'
    WHEN 'lee' THEN 'handsome'
    ELSE 'good' END as oldname
    FROM lee


    第三种:当然了,case when 语句还可以复合
    select name, birthday,
    case
    when birthday > '1983' then 'yong'
    when name='lee' then 'handsome'
    else 'just so so' end
    from lee;


    在这里用sql语句进行日期比较的话,需要对年加引号,要不然可能结果和预期的结果不同,
    当然也可以用year函数来实现
    select name,
    case when year(birthday) > 1988 then 'yong'
    when year(birthday) < 1980 then 'old'
    else 'ok' END
    from lee;


    ==========================================================
    create table penalties
    (
    paymentno INTEGER not NULL,
    payment_date DATE not null,
    amount DECIMAL(7,2) not null,
    primary key(paymentno)
    )


    insert into penalties values(1,'2008-01-01',3.45);
    insert into penalties values(2,'2009-01-01',50.45);
    insert into penalties values(3,'2008-07-01',80.45);


    第一题:对罚款登记分为三类,第一类low,包括大于0小于等于40的罚款,第二类moderate大于40到80之间的罚款,第三类high包含所有大于80的罚款


    select payment_date, amount,
    case
    when amount >= 0 AND amount < 40 then 'low'
    when amount >=40 AND amount < 80 then 'moderate'
    when amount >=80 then 'high'
    else 'null' END
    FROM penalties


    第二题:统计出属于low的罚款编号
    select * from
    ( select paymentno, amount,
    case
    when amount >= 0 AND amount < 40 then 'low'
    when amount >=40 AND amount < 80 then 'moderate'
    when amount >=80 then 'high'
    else 'incorrect' end lvl
    from penalties) as p
    where p.lvl = 'low'

  • 相关阅读:
    JavaScript箭头函数 和 generator
    JavaScript闭包
    JavaScript高阶函数 map reduce filter sort
    JavaScript函数定义和调用 变量作用域
    python实现遗传算法求函数最大值(人工智能作业)
    PAT 1003
    制作U盘启动盘之后的恢复
    异步IO
    CCF201703-3 Markdown
    SQLAlchemy
  • 原文地址:https://www.cnblogs.com/hankyoon/p/6097972.html
Copyright © 2011-2022 走看看