介紹
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 員工;
統計崗位類別:
統計崗位人數:
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
員工;