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

SQL语法 case when语句用法讲解

CASE WHEN解释


SQL中的CASE WHEN语句是一种条件表达式,它允许你根据不同的情况返回不同的值。CASE WHEN通常用于SELECT语句中,用于创建新的列,该列的值取决于其他列的值。CASE WHEN可以用于任何可以使用表达式的地方。

大致概述:

case when 条件1 then 结果1 else 结果2 end

如何满足条件1 就选取结果1做结果,否则结果2,结束

case 
when 条件1 then 结果1
when 条件2 then 结果2  
when 条件3 then 结果3 else 结果4 end

判断是否满足条件1,满足选取 结果1,
否则继续判断是否满足条件2,满足选取 结果2,
否则继续判断是否满足条件3,满足选取 结果3,否则选用结果4,
结果4 相当与 一个默认值,如果不满足条件1、2、3,就用默认值

CASE WHEN有两种主要形式:

  1. 简单Case表达式
  2. 搜索Case表达式

简单Case表达式

SELECT column_name,CASE input_columnWHEN value1 THEN result1WHEN value2 THEN result2...ELSE default_resultEND AS alias_name
FROM table_name;

搜索Case表达式

SELECT column_name,CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_resultEND AS alias_name
FROM table_name;

示例1:

假设有一个学生成绩表student_scores,包含字段namescore,我们想根据分数给学生划分等级:

  • 分数大于等于90为A级
  • 分数大于等于80为B级
  • 分数大于等于70为C级
  • 分数大于等于60为D级
  • 其他为E级
    使用CASE WHEN的SQL语句如下:
SELECT name,score,CASEWHEN score >= 90 THEN 'A级'WHEN score >= 80 THEN 'B级'WHEN score >= 70 THEN 'C级'WHEN score >= 60 THEN 'D级'ELSE 'E级'END AS grade
FROM student_scores;

这个查询会返回每个学生的名字、分数和对应的等级。如果score字段的值满足某个WHEN子句中的条件,CASE表达式就会返回那个THEN子句中的值。如果都不满足,则返回ELSE子句中的值。如果省略了ELSE子句,并且没有任何WHEN子句为真,结果将为NULL

示例2:

这里有两个表,一个学生表student,一个学生成绩表score
student:
在这里插入图片描述
score:
在这里插入图片描述
我们根据每一位学生成绩的总分的来判断是优、良、差,并按照总成绩排序

select a.Student_ID,a.name,b.sumgrade as "总成绩",CASE WHEN b.sumgrade >= 160 THEN '优'WHEN b.sumgrade < 160 and b.sumgrade >= 140 THEN '良'WHEN b.sumgrade < 140 and b.sumgrade >= 120 THEN '及格'ELSE '差' END as '评级'
from student a
left join (select Student_ID,sum(grade) sumgrade from score GROUP BY Student_ID) b on a.Student_ID = b.Student_ID 
ORDER BY b.sumgrade DESC

结果:
在这里插入图片描述

题主学习记录,大家多多包涵。

在这里插入图片描述

http://www.lryc.cn/news/338938.html

相关文章:

  • Project Euler_Problem 193_Few Repeated Digits_欧拉筛+容斥公式
  • 排序算法-基数排序
  • ChatGPT在线网页版
  • 5.SpringSpringBoot八股
  • 0基础刷图论最短路 3(从ATcoder 0分到1800分)
  • k8s+docker一键安装过程
  • Python3+Appium+Android SDK+真机+实现app自动化测试-基于Red Hat7.9版本搭建环境及运行python脚本。
  • 深入理解MD5算法:原理、应用与安全
  • 架构师系列-搜索引擎ElasticSearch(三)- Java API
  • Ubuntu下配置Android NDK环境
  • 使用 vue3-sfc-loader 加载远程Vue文件, 在运行时动态加载 .vue 文件。无需 Node.js 环境,无需 (webpack) 构建步骤
  • stm32移植嵌入式数据库FlashDB
  • Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境
  • 文件批量重命名并批量修改文件扩展名,支持随机大小写字母命名并修改扩展名字母
  • 【管理咨询宝藏70】MBB大型城投集团内外部环境分析报告
  • 服务器挖矿病毒解决ponscan,定时任务解决
  • 【鸿蒙开发】第二十一章 Media媒体服务(二)--- 音频播放和录制
  • 网络安全从入门到精通(特别篇I):Windows安全事件应急响应之Windows应急响应基础必备技能
  • 基于SpringBoot+Mybatis框架的私人影院预约系统(附源码,包含数据库文件)
  • 【SERVERLESS】AWS Lambda上实操
  • IDEA2023 开发环境配置
  • YOLOV5 + 双目相机实现三维测距(新版本)
  • 【计算机网络】(一)计算机网络概述
  • 前端npm常用命令总结
  • [尚硅谷flink] 检查点笔记
  • JVM虚拟机(五)强引用、软引用、弱引用、虚引用
  • (最新)itext7 freemarker动态模板转pdf
  • solidworks electrical 2D和3D有什么区别
  • 4.2、ipex-llm(原bigdl-llm)进行语音识别
  • 上海亚商投顾:创业板指低开低走 黄金、家电股逆势大涨