建表:

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'

Mysql的when then_mysql case when then 使用相关推荐

  1. MySQL 高级 - 存储过程 - 语法 - case结构

    MySQL 高级 - 存储过程 - 语法 - case结构 -- 给定一个月份, 然后计算出所在的季度 create procedure pro_test7(mon int) begindeclare ...

  2. MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN

    如何在MySQL中正确使用CASE..WHEN 这里是一个演示查询,注意它非常简单,仅在base_price为0的位置获取,并且仍然select条件3: SELECT CASE course_enro ...

  3. mysql sum when then_MySQL中group by , sum , case when then 的使用

    在我们使用数据库的时候,可能会遇到需要进行统计的情况. 比如需要统计一下,下表中各个年份的胜负场数. 遇到这样的情况,我们应该怎么办呢? 在mysql中我们可以使用group by sum  case ...

  4. mysql 中的then_mysql中case when then end的含义和用法

    参见这篇博客:https://blog.csdn.net/rongtaoup/article/details/82183743 case when then else end 语句用于查询满足多种条件 ...

  5. MySQL的if,case语句使用总结

    Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 & ...

  6. mysql操作查询结果case when then else end用法举例

    Case具有两种格式.简单Case函数和Case搜索函数.  --简单Case函数  CASE sex           WHEN '1' THEN '男'           WHEN '2' T ...

  7. mysql中IFNULL,IF,CASE的区别

    为什么80%的码农都做不了架构师?>>>    假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,pending refund,refund,ca ...

  8. Mysql - 从一个小 case 理解 MVCC

    从 innoDB 的一致性非锁定读说起 非锁定读和行快照数据 一致性的非锁定读(consistent nonlocking read)是指 InnoDB 存储引擎通过行多版本控制(multi vers ...

  9. MySQL巧用sum,case...when...优化统计查询

    最近在公司做项目,涉及到开发统计报表相关的任务,由于数据量相对较多,之前写的查询语句查询五十万条数据大概需要十秒左右的样子,后来经过老大的指点利用sum,case...when...重写SQL性能一下 ...

最新文章

  1. [C语言] qsort 快速排序函数讲解
  2. 一年后斩获腾讯T3,层层深入
  3. Android 编程下获得应用程序的签名
  4. 使用阿里云容器服务Kubernetes实现蓝绿发布功能
  5. 数据图表可视化_数据可视化十大最有用的图表
  6. 【LeetCode笔记】394. 字符串解码(Java、递归、栈)
  7. 安卓应用安全指南 六、困难问题
  8. CodeForces - 937D Sleepy Game
  9. elk替代_Golang-logrus简单的日志收集系统(替代ELKB)
  10. 市场经济下,一周休息2.5天难在落实
  11. ssm毕设项目高校饭堂管理系统8gmjo(java+VUE+Mybatis+Maven+Mysql+sprnig)
  12. WinDbg分析蓝屏dump原因
  13. Simulated maze模拟迷宫(C++实现)
  14. 【字符串匹配】BF算法
  15. leetcode 812. Largest Triangle Area(python)
  16. 前端javascript总结笔记(一)--js的三座大山
  17. ossec是干什么的?
  18. 纽约大学计算机和信息科学专业,纽约大学与罗切斯特大学计算机科学专业比较...
  19. 深入浅出WMS之出库流程解析
  20. 微擎php页面跳转,登录微擎后台直接跳转到人人商城后台首页

热门文章

  1. dcm4che依赖下载不了
  2. DHCP、网关和DNS地址的捆绑技巧
  3. 仿照java的jdk动态代理实现go语言动态代理
  4. 使用可空类型(Nullable)
  5. 无线营销的“变”和“不变”
  6. 重磅发布,时隔两月——复旦大学MOSS最新0.0.3版本发布
  7. 怎么用计算机同步文件夹,怎么实现同一台电脑上两个文件夹自动同步
  8. 全局唯一序列号的生成
  9. 三天打鱼两天晒网问题Python求解
  10. 微信开发者工具出现崩溃解决