mysql 中 case when 的使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL NoSQL
|
6月前
|
关系型数据库 MySQL
MySQL中CASE WHEN用法总结
MySQL中CASE WHEN用法总结
|
6月前
|
关系型数据库 MySQL
mysql动态查列(case when then else end)
mysql动态查列(case when then else end)
|
6月前
|
SQL 关系型数据库 MySQL
MySQL——case when语句测试
MySQL——case when语句测试
69 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
419 0
|
关系型数据库 MySQL
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
MySQL实战基础知识入门(4):MySQL高级函数CASE WHEN END
115 0
|
7月前
|
SQL 关系型数据库 MySQL
MySQL知识汇总:MySQL函数CASE WHEN用法详解
MySQL知识汇总:MySQL函数CASE WHEN用法详解
|
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进行排序
182 0
|
SQL 关系型数据库 MySQL
Mysql表达式 | CASE IF 判空
Mysql表达式 | CASE IF 判空