mysql 中 case when 的使用

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: mysql 中 case when 的使用

问题分析

最近遇到一个问题:

year amount num
1991 1 1.1
1991 2 1.2
1991 3 1.3
1992 1 2.1
1992 2 2.2
1992 3 2.3

把上面表格的数据查询成:

year m1 m2 m3
1991 1.1 1.2 1.3
1992 2.1 2.2 2.3

看到这样的需求,首先想到的是用 case 去统计以及用 group by 来分组

第一版 sql 代码:

image.png

查询出来的结果有点不如人意:

year m1 m2 m3
1991 1.1

1992 2.1

这么说明了分组之后只显示到第一行数据,那么我们去掉分组看看:

image.png

得到的结果是:

year m1 m2 m3
1991 1.1 0 0
1991 0 1.2 0
1991 0 0 1.3
1992 2.1 0 0
1992 0 2.2 0
1992 0 0 2.3

有点像我们想要的了,只是没有分组以及去掉空值

而且我们可以看出,在分组的情况下 m1, m2, m3 的值都是一个最大值来的

所以我们可以用一个子查询来查询上面的结果集中分组的最大值 最终版 sql

image.png

最终可以得到我们想要的结果:

year m1 m2 m3
1991 1.1 1.2 1.3
1992 2.1 2.2 2.3

case when 语法

第一种用法:

image.png 第二种用法:

image.png

两种用法的区别:

第一种 CASE 语法返回的是第一个 value=compare_value true 的分支的结果。

第二种 CASE 语法返回的是第一个 condition true 的分支的结果。

case when的使用场景

image.png

  • 输出多个指标

老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。

  • 行转列

就正如本文上面例子所示

  • SQL优化

case when 性能调优

最后

如果文章可以给你带来一丝收获,请举起你的手指,给我来个一键三连吧

参考文章

https://juejin.cn/post/6971040309065187342#heading-9

https://my.oschina.net/u/1187675/blog/1555760

https://blog.csdn.net/rongtaoup/article/details/82183743

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 SQL NoSQL
|
关系型数据库 MySQL
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
243 0
|
关系型数据库 MySQL
MySQL中CASE WHEN用法总结
MySQL中CASE WHEN用法总结
1584 0
|
关系型数据库 MySQL
mysql动态查列(case when then else end)
mysql动态查列(case when then else end)
183 0
|
SQL 关系型数据库 MySQL
MySQL——case when语句测试
MySQL——case when语句测试
226 0
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
1135 0
|
SQL 关系型数据库 MySQL
MySQL知识汇总:MySQL函数CASE WHEN用法详解
MySQL知识汇总:MySQL函数CASE WHEN用法详解
|
SQL 关系型数据库 MySQL
Mysql表达式 | CASE IF 判空
Mysql表达式 | CASE IF 判空
|
SQL Oracle 关系型数据库
java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数等功能
java实现oracle和mysql的group by分组功能|同时具备max()/min()/sum()/case when 函数等功能
|
关系型数据库 MySQL
Mysql 使用case排序
Mysql自定义排序使用case进行排序
323 0

推荐镜像

更多