MySQL CASE 表达式
MySQL CASE表达式
- 一、CASE表达式的语法
- 二、 常用场景
- 1,按属性分组统计
- 2,多条件统计
- 3,按条件UPDATE
- 4, 在CASE表达式中使用聚合函数
- 三、CASE表达式出现的位置
一、CASE表达式的语法
-- 简单CASE表达式
CASE sexWHEN 1 THEN '男'WHEN 2 THEN '女'ELSE '保密'
END-- 搜索CASE表达式
CASEWHEN sex=1 THEN '男'WHEN sex=2 THEN '女'ELSE '保密'
END
注意事项:
- 各分支返回的数据类型必须一致;
- 结尾一定要写 END;
- 养成写 ELSE 子句的习惯(否则返回 NULL);
二、 常用场景
1,按属性分组统计
如:已有全国各市区人口数,统计各省总人口数
id | city | population |
---|---|---|
1 | 南昌市 | 656 |
2 | 九江市 | 454 |
3 | 宜春市 | 495 |
4 | 合肥市 | 800 |
5 | 芜湖市 | 373 |
6 | 蚌埠市 | 330 |
7 | 长沙市 | 1005 |
8 | 株洲市 | 390 |
9 | 北京市 | 2185 |
province | 总人口 |
---|---|
江西省 | 1605 |
安徽省 | 1503 |
湖南 | 1395 |
其它 | 2185 |
SELECTCASE WHEN city IN('南昌市','九江市','宜春市') THEN '江西省'WHEN city IN('合肥市','芜湖市','蚌埠市') THEN '安徽省'WHEN city IN('长沙市','株洲市') THEN '湖南'ELSE '其它'END AS province, SUM(population) AS '总人口'
FROM `city_pop`
GROUP BY province
2,多条件统计
如:按姓名和学科汇总成绩
id | name | class | score |
---|---|---|---|
1 | 张三 | chinese | 98 |
2 | 张三 | math | 87 |
3 | 张三 | english | 91 |
4 | 李四 | chinese | 100 |
5 | 李四 | math | 98 |
6 | 李四 | english | 79 |
name | 语文 | 数学 | 英语 |
---|---|---|---|
张三 | 98 | 87 | 91 |
李四 | 100 | 98 | 79 |
SELECT name,SUM(CASE WHEN class='chinese' THEN score ELSE 0 END) AS '语文',SUM(CASE WHEN class='math' THEN score ELSE 0 END) AS '数学',SUM(CASE WHEN class='english' THEN score ELSE 0 END) AS '英语'
FROM `class`
GROUP BY name
3,按条件UPDATE
如:工资20000以上员工降薪10%;工资10000以下员工加薪20%
id | name | salary |
---|---|---|
1 | 张三 | 25000 |
2 | 李四 | 9000 |
3 | 王五 | 12000 |
id | name | salary |
---|---|---|
1 | 张三 | 22500 |
2 | 李四 | 10800 |
3 | 王五 | 12000 |
UPDATE salary
SET salary =CASE WHEN salary >= 20000 THEN salary - salary*0.1 WHEN salary <= 10000 THEN salary + salary*0.2 ELSE salary END
4, 在CASE表达式中使用聚合函数
如:每个人可以参加一个或多个俱乐部,当某人参加多个俱乐部时,需要用flag=1设置主俱乐部,默认flag=0
id | name | club | flag |
---|---|---|---|
1 | 张三 | 篮球 | 0 |
2 | 张三 | 羽毛球 | 1 |
3 | 李四 | 足球 | 0 |
4 | 李四 | 篮球 | 1 |
5 | 王五 | 足球 | 0 |
6 | 刘六 | 羽毛球 | 0 |
name | main_club |
---|---|
张三 | 羽毛球 |
李四 | 篮球 |
王五 | 足球 |
刘六 | 羽毛球 |
// group by 为严格模式(sql_mod=ONLY_FULL_GROUP_BY)时,
// select查询的列,要么在group by中声明,要么通过聚合函数包装(此处用了max)
SELECT name, CASE WHEN COUNT(*) > 1 THEN MAX(CASE WHEN flag = 1 THEN club ELSE NULL END)ELSE MAX(club) END AS main_club
FROM club
GROUP BY name
三、CASE表达式出现的位置
作为表达式,在执行时会被判断为一个固定值,因此不仅可以在SELECT子句中使用,还可以在WHERE子句、GROUP BY 子句、ORDER BY 子句中使用,它甚至可以写在聚合函数内部。
简单点来说,在能写列名和常量的地方,通常都可以写CASE表达式。
相关文章:
MySQL CASE 表达式
MySQL CASE表达式 一、CASE表达式的语法二、 常用场景1,按属性分组统计2,多条件统计3,按条件UPDATE4, 在CASE表达式中使用聚合函数 三、CASE表达式出现的位置 一、CASE表达式的语法 -- 简单CASE表达式 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女…...
Unity3D 游戏数据本地化存储与管理详解
在Unity3D游戏开发中,数据的本地化存储与管理是一个重要的环节。这不仅涉及到游戏状态、玩家信息、游戏设置等关键数据的保存,还关系到游戏的稳定性和用户体验。本文将详细介绍Unity3D中游戏数据的本地化存储与管理的技术方法,并给出相应的代…...

昇思25天学习打卡营第1天|初学教程
文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录,这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号,然后登录,按下图操作,创建环境即可 创建好环境后进入即可࿰…...

ctfshow-web入门-命令执行(web59-web65)
目录 1、web59 2、web60 3、web61 4、web62 5、web63 6、web64 7、web65 都是使用 highlight_file 或者 show_source 1、web59 直接用上一题的 payload: cshow_source(flag.php); 拿到 flag:ctfshow{9e058a62-f37d-425e-9696-43387b0b3629} 2、w…...

Websocket在Java中的实践——最小可行案例
大纲 最小可行案例依赖开启Websocket,绑定路由逻辑类 测试参考资料 WebSocket是一种先进的网络通信协议,它允许在单个TCP连接上进行全双工通信,即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455,并且已被W3C定义为…...
python请求报错::requests.exceptions.ProxyError: HTTPSConnectionPool
在发送网页请求时,发现很久未响应,最后报错: requests.exceptions.ProxyError: HTTPSConnectionPool(hostsvr-6-9009.share.51env.net, port443): Max retries exceeded with url: /prod-api/getInfo (Caused by ProxyError(Unable to conne…...

【Unity】Excel配置工具
1、功能介绍 通过Excel表配置表数据,一键生成对应Excel配置表的数据结构类、数据容器类、已经二进制数据文件,加载二进制数据文件获取所有表数据 需要使用Excel读取的dll包 2、关键代码 2.1 ExcelTool类 实现一键生成Excel配置表的数据结构类、数据…...
001 线性查找(lua)
文章目录 迭代器主程序 迭代器 -- 定义一个名为 linearSearch 的函数,它接受两个参数:data(一个数组)和 target(一个目标值) function linearSearch(data, target) -- 使用 for 循环遍历数组 data&…...

数据结构之链表
储备知识: 线性表 :一对一的数据所组成的关系称为线性表。 线性表是一种数据内部的逻辑关系,与存储形式无关线性表既可以采用连续的顺序存储(数组),也可以采用离散的链式存储(链表)顺序表和链表都称为线性表 顺序存储就是将数据存…...
【小工具】 Unity相机宽度适配
相机默认是根据高度适配的,但是在部分游戏中需要根据宽度进行适配 实现步骤 定义标准屏幕宽、高判断标准屏幕宽高比与当前的是否相等通过**(标准宽度/当前宽度) (标准高度 / 当前高度)**计算缩放调整相机fieldOfView即…...
centos误删yum和python
在下载pkdg时,因为yum报错坏的解释器,然后误删了yum和python。 在下载各种版本,创建各种软连接,修改yum文件都不好使后,发现了这样一个方法:Centos: 完美解决python升级导致的yum报错问题(相信…...

WP黑格导航主题BlackCandy
BlackCandy-V2.0全新升级!首推专题区(推荐分类)更多自定义颜色!选择自己喜欢的色系,焕然一新的UI设计,更加扁平和现代化! WP黑格导航主题BlackCandy...
elasticsearch底层核心组件
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它基于Apache Lucene构建,并添加了分布式特性。以下是Elasticsearch的一些底层核心组件: 1. **Lucene**: - Elasticsearch基于Apache Lucene,一个高性能的…...

EasyExcel数据导入
前言: 我先讲一种网上信息的获取方式把,虽然我感觉和后面的EasyExcel没有什么关系,可能是因为这个项目这个操作很难实现,不过也可以在此记录一下,如果需要再拆出来也行。 看上了网页信息,怎么抓到&#x…...

20240630 每日AI必读资讯
📚全美TOP 5机器学习博士发帖吐槽:实验室H100数量为0! - 普林斯顿、哈佛「GPU豪门」,手上的H100至少三四百块,然而绝大多数ML博士一块H100都用不上 - 年轻的研究者们纷纷自曝自己所在学校或公司的GPU情况:…...

第十一章 Qt的模型视图
目录 一、模型/视图的原理 1、原理分析 2、模型(数据模型) 3、视图 4、代理 二、文件系统模型 1、项目练习 2、UI 设计 3、代码实现 三、字符串链表模型 QStringListModel 1、项目效果 2、项目实现 四、标准项模型(QStandardItemModel) 1、模型分析 2、项目效…...

力扣 单词规律
所用数据结构 哈希表 核心方法 判断字符串pattern 和字符串s 是否存在一对一的映射关系,按照题意,双向连接的对应规律。 思路以及实现步骤 1.字符串s带有空格,因此需要转换成字符数组进行更方便的操作,将字符串s拆分成单词列表…...

10款好用不火的PC软件,真的超好用!
AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/市场上有很多软件,除了那些常见的大众化软件,还有很多不为人知的小众软件,它们的作用非常强大,简洁…...

Windows怎么实现虚拟IP
在做高可用架构时,往往需要用到虚拟IP,在linux上面有keepalived来实现虚拟ip的设置。在windows上面该怎么弄,keepalived好像也没有windows版本,我推荐一款浮动IP软件PanguVip,它可以实现windows上面虚拟ip的漂移。设置…...

【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)
学习日期:2024.6.29 内容摘要:基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台,每分每秒都会有人更新内容,我们作为用户当然希望时刻都能收到最新的消息,为…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...