Case表达式
在发现结果为真的WHEN子句时,CASE表达式的真假值判断会终止,剩余的WHEN子句会被忽略:
注意:
- 统一各分支返回的数据类型.
- 记得写end.
- 写else子句的习惯,否则执行结果默认处理为null.
案例1
下面给出的group by引用select中定义的别名,case写在group by违反SQL规则(GROUP BY 子句比 SELECT 语句先执行):
案例2
总结:聚合函数可以实现行转列,实现select的条件分支(代替where)
案例3
用 CHECK 约束定义多个列的条件关系
题目:女性员工工资必须在20w以上(蕴含式(conditional)的逻辑表达式,记作 P → Q)
案例4
要求
- 对当前工资为 30 万以上的员工,降薪 10%。
- 对当前工资为 25 万以上且不满 28 万的员工,加薪 20%。
案例5
用以上表生成下面表:
课程名称 | 6 月 | 7 月 | 8 月 |
---|---|---|---|
会计入门 | ○ | × | × |
财务知识 | × | × | ○ |
簿记考试 | ○ | × | × |
税务师 | ○ | ○ | ○ |
注:此sql实现可以使用in或exists谓词
案例6
- 获取只加入了一个社团的学生的社团 ID。
- 获取加入了多个社团的学生的主社团 ID。
注:此处使用MAX,确保每个学生只被计算一次,确保在每个分组(每个学生)中只选择一个社团.
case在执行时会被判断为一个固定值,因此可以用在聚合函数中.
习题实践 求两列中最大值
拓展为三列,需要在分支中嵌套(case表达式在执行时会解析为标量值):
如果为四列或者五列,先行转列之后使用max函数:
其中上述使用union all产生重复数据(建立临时表进行行转列),之后使用group by进行排序,最后max进行去重.
注:Oracle 或 MySQL 可以使用下面函数进行求解:
__EOF__

本文作者:羊徒
本文链接:https://www.cnblogs.com/ayy-200248/p/18120324.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/ayy-200248/p/18120324.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器