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

【SQL学习笔记2】深入理解 CASE WHEN 的魔法用法

CASE WHEN 是 SQL 中非常常用的一种条件表达式,它类似于编程语言中的 if-then-else 逻辑。CASE WHEN 可以在查询中用于根据不同的条件返回不同的值,非常适合数据转换、分类统计等场景。

几乎所有的主流 SQL 数据库都支持 CASE WHEN,包括但不限于:

  • MySQL
  • PostgreSQL
  • SQL Server
  • Oracle
  • SQLite
  • BigQuery
  • HiveQL 等 

我们可以从零开始,创建一个简单的数据表,并插入一些示例数据,然后通过 CASE WHEN 进行演练。

目录

第一步:创建表结构(MySQL语法)

第二步:插入测试数据

第三步:使用case when进行查询演练

1.性别转换显示

2.根据年龄分组

3.统计各部门不同薪资水平人数  

4.排序优先级(比如按薪资等级排序)  


第一步:创建表结构(MySQL语法)
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),gender CHAR(1),age INT,salary DECIMAL(10,2),department VARCHAR(50)
);
  第二步:插入测试数据
INSERT INTO employees (name, gender, age, salary, department) 
VALUES
('张三', 'M', 28, 4500.00, '技术部'),
('李四', 'F', 35, 6000.00, '市场部'),
('王五', 'M', 42, 8000.00, '财务部'),
('赵六', 'F', 25, 3000.00, '技术部'),
('孙七', 'M', 50, 9000.00, '技术部'),
('周八', 'F', 31, 5500.00, '市场部'),
('吴九', 'M', 62, 7000.00, '财务部'),
('郑十', 'F', 29, 4800.00, '市场部');

第三步:使用case when进行查询演练
1.性别转换显示
SELECT name,CASE genderWHEN 'M' THEN '男'WHEN 'F' THEN '女'ELSE '未知'END AS gender_desc
FROM employees;

 

 2.根据年龄分组
SELECT name, age,CASE WHEN age < 30 THEN '青年'WHEN age BETWEEN 30 AND 50 THEN '中年'ELSE '老年'END AS age_group
FROM employees;

3.统计各部门不同薪资水平人数  
SELECT department,COUNT(*) AS total_count,SUM(CASE WHEN salary < 4000 THEN 1 ELSE 0 END) AS low_salary_count,SUM(CASE WHEN salary BETWEEN 4000 AND 7000 THEN 1 ELSE 0 END) AS medium_salary_count,SUM(CASE WHEN salary > 7000 THEN 1 ELSE 0 END) AS high_salary_count
FROM employees
GROUP BY department;
4.排序优先级(比如按薪资等级排序)  
SELECT name, salary,CASE WHEN salary < 4000 THEN 1WHEN salary BETWEEN 4000 AND 7000 THEN 2ELSE 3END AS salary_rank
FROM employees
ORDER BY salary_rank;

 

http://www.xdnf.cn/news/13321.html

相关文章:

  • 可视化在车间质量管控中的创新应用,提升品质
  • python模拟键盘 鼠标操作 通过ctypes调用Windows API实现底层输入模拟
  • filebeat原理架构
  • css~word-break属性
  • 核方法、核技巧、核函数、核矩阵
  • 模型训练-关于token【低概率token, 高熵token】
  • 【Python】 -- 趣味代码 - 飞船大战游戏
  • DiffBP: generative diffusion of 3D molecules for target protein binding
  • 智慧园区综合运营管理平台(SmartPark)和安全EHS平台的分工与协作
  • 电动汽车VCU扭矩控制模式分类方法
  • 【javascript】泡泡龙游戏中反弹和查找匹配算法
  • Jaeger开源分布式追踪平台深度剖析(三)Jaeger默认存储Badger原理剖析
  • 网格布局示例代码解析
  • (三)总结(缓存/ETag请求头)
  • CentOS7下的Redis部署
  • XS2105M IEEE 802.3af 兼容、受电设备接口控制器
  • Day27 函数专题2:装饰器
  • 从中科大镜像获取linux内核5.10.168的git方法
  • Python 字符串、字节串与编解码:数据转换的奥秘
  • 【Redis/1-前置知识】分布式系统概论:架构、数据库与微服务
  • 【力扣数据库知识手册笔记】索引
  • java--怎么定义枚举类
  • 状态模式:对象行为的优雅状态管理之道
  • 图像直方图分析:全面掌握OpenCV与Matplotlib绘制技巧
  • 《通信之道——从微积分到 5G》读书总结
  • 最短回文串解题思路分享
  • 基于大模型预测的输尿管上段积水诊疗方案研究报告
  • 【TinyWebServer】HTTP连接处理
  • 【位运算】消失的两个数字(hard)
  • websocket实践