介绍
MySQL中case when和like结合可以用于对文本数据进行条件判断和模式匹配,特别是在需要根据复杂的条件对结果进行分类或转换时。
这种方法在数据分析、报表生成、数据仓库建设等场景中非常有用。
优点
- 模式匹配:LIKE 运算符可以用于模式匹配,使用通配符(例如 % 和 _)来匹配任意字符或字符序列。这使得你可以在 CASE WHEN 语句中根据不同的模式对结果进行分类或转换。
- 灵活性:LIKE 运算符提供了更大的灵活性,因为你可以使用通配符来匹配任意的字符串模式。相比之下,简单的比较运算符(如 = 或 <>)只能进行精确匹配。
- 条件简化:使用 LIKE 运算符可以简化条件表达式,尤其是当你需要匹配多个模式时。你可以在 CASE WHEN 语句中使用多个 WHEN 子句,每个子句使用不同的模式进行匹配,从而减少了代码的复杂性。
缺点
- 在大量数据的情况下,可能会影响查询性能,因为需要逐行进行判断和匹配。
- 如果使用过多的CASE WHEN语句,可能会导致代码可读性降低,维护起来较困难。
SELECT column1, column2,
CASE
WHEN column1 LIKE 'pattern1%' THEN 'Result 1'
WHEN column1 LIKE 'pattern2%' THEN 'Result 2'
ELSE 'Other Result'
END AS result
FROM your_table;
示例(统计岗位类别,统计岗位人数)
新建表
CREATE TABLE `员工` (
`员工ID` int(11) NOT NULL AUTO_INCREMENT,
`姓名` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`职位` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`员工ID`)
) ENGINE=InnoDB;
写入测试数据
INSERT INTO 员工 ( 姓名, 职位 )
VALUES
( '董永', '销售经理' ),
( '赵四', '软件开发工程师' ),
( '赵本山', '销售代表' ),
( '李云龙', '人力资源经理' ),
( '石昊', '质量保障工程师' ),
( '白玉龙', '销售经理' ),
( '东方清明', '软件设计工程师' ),
( '祈年', '销售代表' ),
( '宋子奥', '人力资源经理' ),
( '柯蓝', '质量保障工程师' );
使用CASE WHEN和LIKE进行查询
SELECT 姓名, 职位,
CASE
WHEN 职位 LIKE '销售%' THEN '销售岗'
WHEN 职位 LIKE '软件%' THEN '技术岗'
WHEN 职位 LIKE '人力%' THEN '人力岗'
ELSE '其他职位'
END AS 职位类别
FROM 员工;
统计岗位类别:
![](https://www.isolves.com/d/file/p/2023/09-22/162d0afed7f21de6d2d38d4c11a4ec6a.png)
统计岗位人数:
SELECT
SUM( CASE WHEN 职位 LIKE '%销售%' THEN 1 ELSE 0 END ) AS 销售岗人数,
SUM( CASE WHEN 职位 LIKE '%软件%' THEN 1 ELSE 0 END ) AS 技术岗人数,
SUM( CASE WHEN 职位 LIKE '%人力%' THEN 1 ELSE 0 END ) AS 人力岗人数
FROM
员工;
![](https://www.isolves.com/d/file/p/2023/09-22/3913df0808faec4916dd68e5a770afd1.png)