当前位置: 首页 > article >正文

SQL -- 条件分支

引入分支

假设有一个学生表 student,包含以下字段:name(姓名)、age(年龄)。请你编写一个 SQL 查询,将学生按照年龄划分为三个年龄等级(age_level):60 岁以上为 "老同学",20 岁以上(不包括 60 岁以上)为 "年轻",20 岁及以下、以及没有年龄信息为 "小同学"。

返回结果应包含学生的姓名(name)和年龄等级(age_level),并按姓名升序排序。

(题目来源:SQL之母 - 免费SQL自学网站 by 程序员鱼皮 (yupi.icu))

对于这个需求,我们很容易联想到java、c++、c中的if-else if结构,在mysql中,没有直接的条件循环语句,但是可以使用CASE语句或者IF函数来实现条件分支的逻辑。以下是使用CASE语句的一个例子:

select name,
case 
when(age >= 60) then '老同学'
when(age > 20) then '年轻'
else '小同学' 
end as age_level;

结果如下:

可以将case .... end 看做是一个字段,后面加上了as age_level 是取别名叫做age_level(as可省略),如果不加上后面的取别名操作,sql最终会将case...end所有的当做是字段的名字,效果如下:

可以看到,查询效果还是一样的,只是字段名字变得冗长。

分支语法

  

CASE
    when(条件一) 
        then '结果一'
    when(条件二)
        then '结果二'
    when(条件...)
        then '结果...'
    ...
    else 'xxx' 

END (as) '别名'; -- as可以省略

-- 这里的when-then搭配使用,一个条件对应一个结果,else后面也会跟着一个结果,仅当前面所有的when里面的条件都不满足才会执行else的结果。 
-- 一个CASE - END 可以视为一个字段放在select中

这个语法类似于:

if(条件一)  {结果一}
else if(条件二)  {结果二}
else if...
else {上述条件都不满足才会执行的结果}

else和上述if-else if-else中的else是等价的,同样else还类似于switch中的default。


http://www.kler.cn/a/441593.html

相关文章:

  • Qt Creator 15.0.0如何更换主题和字体
  • docker 部署confluence
  • MySQL可直接使用的查询表的列信息
  • C#深度神经网络(TensorFlow.NET)
  • 攻防世界GFSJ1012 pwnstack
  • leetcode 2239. 找到最接近 0 的数字
  • OpenCV及基本用法
  • 原理 | dubbo [与 springboot 整合时服务导出的触发]
  • Java全栈项目 - 学生宿舍管理系统
  • 加载文件到docker中的mysql上
  • Linux高性能服务器编程 | 读书笔记 | 6. 高性能服务器程序框架
  • 【报错解决】pip install volcengine-python-sdk无法安装包
  • 【行政区编码对应表及生态等级数据的制作】-python
  • centos下安装ffmpeg
  • Python爬虫之代理的设置
  • linux0.11源码分析第一弹——bootset.s内容
  • (2024.12)记录——Ubuntu20.04安装opencv库
  • 【JVM】JVM基础教程(四)
  • ubuntu20.04安装qt creator
  • Leetcode经典题8--H指数
  • 深度学习之Autoencoders GANs for Anomaly Detection 视频异常检测
  • xshell连接虚拟机,更换网络模式:NAT->桥接模式
  • SpringBoot集成ENC对配置文件进行加密
  • 阶段性demo 键盘信息过滤
  • 天猫魔盒M17/M17S_超级UI 线刷固件包-可救砖(刷机取消双勾)
  • 【HF设计模式】03-装饰者模式