zoukankan      html  css  js  c++  java
  • mysql 语句case when

    mysql 语句case when

    select USER_ID ,USER_NAME ,CASE WHEN  atten.DESTINATION_ID is null THEN FALSE ELSE TRUE END  as attentioned    from T_SD_USER as user LEFT OUTER JOIN T_SD_ATTENTION as atten on `user`.USER_ID = atten.ORIGIN_ID and atten.DESTINATION_ID = 3001 where `user`.USER_ID = 3000;

    表的创建

    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');

    使用case when语句

    1。

    select name,
    case 
    when birthday<'1981' then 'old'
    when birthday>'1988' then 'yong'
    else 'ok' END YORN
    from lee;
    
     

    2。

    select NAME,
    case name
    when 'sam' then 'yong'
    when 'lee' then 'handsome'
    else 'good' end
    from lee;

    当然了case when语句还可以复合

    3。

    select name,birthday,
    case 
    when birthday>'1983' then 'yong'
    when name='lee' then 'handsome'
    else 'just so so ' end
    from lee;

    在这里用sql语句进行日期比较的话,需要对年加引号。要不然可能结果可能和预期的结果会不同。我的mysql版本5.1

    当然也可以用year函数来实现,以第一个sql为例

    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);


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

    2.#统计出属于low的罚款编号。

    第一道题的解法与上面的相同

    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`

    2.#统计出属于low的罚款编号。重点看这里的解决方法
    方法1.

    select paymentno,amount
    from `penalties`
    where 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 ='low';

    方法2

    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';

    来自 http://www.cnblogs.com/john2000/archive/2010/09/21/1832729.html

  • 相关阅读:
    SVN打tag
    validate命令---rman进行备份和回复的验证
    通达OA 小飞鱼工作流在线培训教程(一)HTML基础介绍
    How to improve Java&#39;s I/O performance( 提升 java i/o 性能)
    mybatis批量插入、批量删除
    Java測试覆盖率工具----Cobertura,EclEmma
    Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)
    灵活数据源的固定行列交叉报表的制作
    HDFS学习笔记(1)初探HDFS
    JPEG压缩图像超分辨率重建算法
  • 原文地址:https://www.cnblogs.com/mjorcen/p/3761280.html
Copyright © 2011-2022 走看看