MYSQL中where 中 使用CASE WHEN

MYSQL中where 中 使用CASE WHEN

数据准备

CREATE TABLE `student` (
  `name` varchar(10) DEFAULT NULL,
  `subject` varchar(10) DEFAULT NULL,
  `score` int(10) DEFAULT NULL,
  `dayTime` varchar(10) DEFAULT NULL,
  `monthTime` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 
INSERT INTO student VALUES('lisi','eng',90,'20240708','202406');
INSERT INTO student VALUES('liming','math',90,'20240808','202407');
INSERT INTO student VALUES('zhangsan','math',93,'20240706',null);
INSERT INTO student VALUES('tom','eng',80,'20240806',null);
 
select *
from student
where score >= 90 and 
case
    when name in ('lisi','liming')then monthTime = date_format(date_add(dayTime,interval - 1 month),'%Y%m')
    else 1=1 end

运行结果

namesubjectscoredayTimemonthTime
lisieng9020240708202406
limingmath9020240808202407
zhangsanmath9320240706null

语法说明

在看一个老的需求时,发现当时在where条件里面使用了CASE WHEN,一时间没想起来当时为什么写一个where里面嵌套使用CASE WHEN,所以现在记录一下:

  1. where中使用CASE WHEN ,可以给符合WHEN条件的数据添加特定的筛选条件
  2. 上面的表中,有的monthTime为NULL,有的不为NULL,对有的学生需要筛选score和monthTime,有的只需要筛选score,要求把这两种数据在一个查询中同时返回,还要避免UNION,优化SQL执行效率,就可以在where中使用CASE WHEN来实现;
  3. CASE WHEN根据符合分支判断的结果,把不同的筛选结果,添加到不同的学生的where的条件后面,实现每个学生根据不同的筛选条件单独查询,但是结果一块返回的效果;
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值