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'

  • 相关阅读:
    统计nginx日志里访问次数最多的前十个IP
    while 格式化输出 运算符 字符编码
    Python 软件安装
    Python 基础
    Typora 基础的使用方法
    Django ORM (四) annotate,F,Q 查询
    Django 惰性机制
    Django ORM (三) 查询,删除,更新操作
    Django ORM (二) 增加操作
    Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
  • 原文地址:https://www.cnblogs.com/hankyoon/p/6097972.html
Copyright © 2011-2022 走看看