【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;