MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

什么是CASE语法?_case语法规则

2025-02-17 12:24 huorong 精选文章 2 ℃ 0 评论



什么是CASE语法?

CASE语法就像是我们在生活中做选择题或者判断题一样。它会根据我们给出的条件,来判断应该选择哪个结果。

比如,我们现在有一个movies表,里面有一个year字段,表示电影的年份。我们想把这些年份转换成“80前”、“80后”、“90后”和“00后”这样的描述。

但是,SQL里并没有现成的函数能直接帮我们完成这个转换。所以,我们就需要用CASE语法来自己写一个逻辑。


怎么看懂CASE语法?

我们先来看一个简单的CASE语法例子:

sql复制代码


select


case


when year < 1980 then '80前'


when year >= 1980 and year < 1990 then '80后'


when year > 1990 and year < 2000 then '90后'


else '00后'


end


as new_year,


year, title


from movies

这段话的意思是:

  1. CASE开始,END结束:中间的部分就是我们的判断逻辑。
  2. WHEN ... THEN ...:每个WHEN后面跟一个条件,THEN后面跟这个条件满足时的结果。
  3. ELSE:如果所有的WHEN条件都不满足,就执行ELSE后面的结果。
  4. AS new_year:我们把CASE的计算结果起了一个新名字,叫做new_year。

所以,这个SQL会遍历movies表里的每一行数据:

  • 如果year小于1980,那么new_year就是“80前”。
  • 如果year在1980到1989之间(包括1980,不包括1990),那么new_year就是“80后”。
  • 如果year在1990到1999之间(不包括1990,包括1999之前的所有年份,但这里写错了应为>=1990),那么new_year就是“90后”。
  • 如果都不满足,那new_year就是“00后”。



CASE语法支持多个字段吗?

你提出了一个很好的问题:CASE里能不能用多个字段来做判断呢?

答案是:可以的

我们来看一个修改后的例子:

sql复制代码


select


case


when year < 1980 or id = 1 then '80前'


when year >= 1980 and year < 1990 then '80后'


when year >= 1990 and year < 2000 then '90后'


else '00后'


end


as new_year,


year, title


from movies

这里,我在第一个WHEN条件里加了一个or id = 1。

这意味着:

  • 如果year小于1980,或者id等于1,那么new_year就是“80前”。
  • 其他的判断逻辑和之前一样。

所以,CASE语法不仅可以用单个字段来判断,还可以用多个字段组合起来判断。只要满足条件,就会返回对应的结果。


试一下就知道了!

现在,你应该对CASE语法有了初步的了解。但是,光看理论是不够的,建议你亲自试一下这个SQL,看看结果是不是和你想象的一样。

通过实践,你会发现CASE语法真的很强大,它可以帮助我们完成很多复杂的逻辑计算和转换。而且,随着你不断尝试和练习,你会越来越擅长使用它!

Tags:case when then end

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言