什么是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
这段话的意思是:
CASE开始,END结束:中间的部分就是我们的判断逻辑。WHEN ... THEN ...:每个WHEN后面跟一个条件,THEN后面跟这个条件满足时的结果。ELSE:如果所有的WHEN条件都不满足,就执行ELSE后面的结果。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语法真的很强大,它可以帮助我们完成很多复杂的逻辑计算和转换。而且,随着你不断尝试和练习,你会越来越擅长使用它!