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

MySQL-CASE WHEN条件语句

介绍

MySQL 中的一种流程控制语法结构,用于在 SQL 查询中实现条件逻辑。它允许你根据一个或多个条件的真假来返回不同的值。可以根据某些条件对数据进行分类或者转换。

使用方式

简单 CASE 表达式

CASE input_expressionWHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] 
END

搜索 CASE 表达式

CASEWHEN boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] 
END

示例

# 建表
CREATE TABLE `sys_user` (`id` VARCHAR(32) NOT NULL COMMENT '用户ID',`name` VARCHAR(50) NOT NULL COMMENT '用户名',`gender` CHAR(1) DEFAULT 'U' COMMENT '性别:M-男,F-女,U-未知',`age` INT DEFAULT NULL COMMENT '年龄',`status` VARCHAR(20) DEFAULT 'normal' COMMENT '状态:normal-正常,disabled-禁用,locked-锁定',`login_count` INT DEFAULT 0 COMMENT '登录次数',`department` VARCHAR(100) DEFAULT NULL COMMENT '部门',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) COMMENT='用户表' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;# 数据
INSERT INTO sys_user (id, name, gender, age, status, login_count, department)
VALUES('1', '张三', 'M', 25, 'normal', 120, '技术部'),('2', '李四', 'F', 30, 'normal', 80, '市场部'),('3', '王五', 'M', 45, 'disabled', 10, '财务部'),('4', '赵六', 'F', 22, 'locked', 5, '人事部'),('5', '钱七', 'U', 35, 'normal', 70, '技术部'),('6', '孙八', 'M', 28, 'normal', 90, '市场部'),('7', '周九', 'F', 24, 'normal', 60, '销售部'),('8', '吴十', 'M', 38, 'disabled', 15, '研发部'),('9', '郑十一', 'F', 26, 'locked', 3, '运维部'),('10', '王十二', 'U', 40, 'normal', 100, '产品部'),('11', '赵十三', 'M', 29, 'normal', 110, '技术部'),('12', '钱十四', 'F', 32, 'disabled', 20, '市场部'),('13', '孙十五', 'M', 27, 'normal', 85, '财务部'),('14', '周十六', 'F', 23, 'locked', 7, '人事部'),('15', '吴十七', 'U', 37, 'normal', 65, '销售部'),('16', '郑十八', 'M', 31, 'normal', 95, '研发部'),('17', '王十九', 'F', 25, 'disabled', 25, '运维部'),('18', '赵二十', 'M', 34, 'normal', 105, '产品部'),('19', '钱二十一', 'F', 28, 'locked', 8, '技术部'),('20', '孙二十二', 'M', 33, 'normal', 75, '市场部');
具体操作
  1. 简单的条件判断
    需求:根据用户的性别字段 gender,返回“男”或“女”。
SELECTid,name,CASE genderWHEN 'M' THEN '男'WHEN 'F' THEN '女'ELSE '未知'END AS gender_desc
FROMsys_user;
  1. 多条件判断
    需求:根据用户的年龄字段 age,判断用户属于哪个年龄段。
SELECTid,name,age,CASEWHEN age < 18 THEN '少年'WHEN age >= 18 AND age < 30 THEN '青年'WHEN age >= 30 AND age < 50 THEN '中年'ELSE '老年'END AS age_group
FROMsys_user;
  1. 行转列
    需求:统计 sys_user 表中不同状态(如正常、禁用、锁定)的用户数量。
SELECTCOUNT(*) AS total_users,SUM(CASE WHEN status = 'normal' THEN 1 ELSE 0 END) AS normal_users,SUM(CASE WHEN status = 'disabled' THEN 1 ELSE 0 END) AS disabled_users,SUM(CASE WHEN status = 'locked' THEN 1 ELSE 0 END) AS locked_users
FROMsys_user;
  1. 根据条件动态生成列值
    需求:根据用户的登录次数 login_count,判断用户是否活跃
SELECTid,name,login_count,CASEWHEN login_count > 100 THEN '非常活跃'WHEN login_count > 50 THEN '活跃'WHEN login_count > 10 THEN '一般活跃'ELSE '不活跃'END AS activity_level
FROMsys_user;

结合聚合函数(聚合函数中使用条件判断)
需求:根据用户的部门 department,统计每个部门的用户数量,并标记部门是否为“大部门”(用户数大于 10)

SELECTdepartment,COUNT(*) AS user_count,CASEWHEN COUNT(*) > 10 THEN '大部门'ELSE '小部门'END AS department_size
FROMsys_user
GROUP BYdepartment;

相关文章:

  • 24-25【动手学深度学习】AlexNet + Vgg
  • 机器学习 | 细说Deep Q-Network(DQN)
  • 机器学习的简单应用
  • 2025.4.20机器学习笔记:文献阅读
  • 【Leetcode 每日一题】2176. 统计数组中相等且可以被整除的数对
  • 快速上手,OceanBase + MCP + LLM,搭建 AI 应用
  • 指形铣刀的结构
  • Vue3+Vite+TypeScript+Element Plus开发-20.按钮权限
  • JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)
  • 大模型在胃十二指肠溃疡预测及诊疗方案制定中的应用研究
  • 大M法处理非线性约束线性化
  • C语言数据类型取值范围
  • DataInputStream 终极解析与记忆指南
  • 期货跟单软件云端部署的重要性
  • 足球AI模型:一款用数据分析赛事的模型
  • vue入门:路由 router
  • 深度理解指针之例题
  • LeetCode算法题(Go语言实现)_51
  • 2025年考取特种设备安全管理 A 证,开启职业新征程
  • 依赖文件导入不进来
  • 京津冀“飘絮之困”如何破解?专家坦言仍面临关键技术瓶颈
  • 谁将主导“视觉大脑”?中国AI的下一个超级赛道
  • 大家聊中国式现代化|邓智团:践行人民城市理念,开创人民城市建设新局面
  • 一图读懂|上海海关公布一季度数据:钢材出口增长超143%
  • 对排出黑烟车辆出具合格报告,广州南沙一检测公司被罚十万元
  • 农贸美学、业态再构、智能管理,今天的菜市场不止有菜