介紹
MySQL中case when和like結(jié)合可以用于對文本數(shù)據(jù)進(jìn)行條件判斷和模式匹配,特別是在需要根據(jù)復(fù)雜的條件對結(jié)果進(jìn)行分類或轉(zhuǎn)換時。
這種方法在數(shù)據(jù)分析、報表生成、數(shù)據(jù)倉庫建設(shè)等場景中非常有用。
優(yōu)點
- 模式匹配:LIKE 運算符可以用于模式匹配,使用通配符(例如 % 和 _)來匹配任意字符或字符序列。這使得你可以在 CASE WHEN 語句中根據(jù)不同的模式對結(jié)果進(jìn)行分類或轉(zhuǎn)換。
- 靈活性:LIKE 運算符提供了更大的靈活性,因為你可以使用通配符來匹配任意的字符串模式。相比之下,簡單的比較運算符(如 = 或 <>)只能進(jìn)行精確匹配。
- 條件簡化:使用 LIKE 運算符可以簡化條件表達(dá)式,尤其是當(dāng)你需要匹配多個模式時。你可以在 CASE WHEN 語句中使用多個 WHEN 子句,每個子句使用不同的模式進(jìn)行匹配,從而減少了代碼的復(fù)雜性。
缺點
- 在大量數(shù)據(jù)的情況下,可能會影響查詢性能,因為需要逐行進(jìn)行判斷和匹配。
- 如果使用過多的CASE WHEN語句,可能會導(dǎo)致代碼可讀性降低,維護(hù)起來較困難。
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;
示例(統(tǒng)計崗位類別,統(tǒng)計崗位人數(shù))
新建表
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;
寫入測試數(shù)據(jù)
INSERT INTO 員工 ( 姓名, 職位 )
VALUES
( '董永', '銷售經(jīng)理' ),
( '趙四', '軟件開發(fā)工程師' ),
( '趙本山', '銷售代表' ),
( '李云龍', '人力資源經(jīng)理' ),
( '石昊', '質(zhì)量保障工程師' ),
( '白玉龍', '銷售經(jīng)理' ),
( '東方清明', '軟件設(shè)計工程師' ),
( '祈年', '銷售代表' ),
( '宋子奧', '人力資源經(jīng)理' ),
( '柯藍(lán)', '質(zhì)量保障工程師' );
使用CASE WHEN和LIKE進(jìn)行查詢
SELECT 姓名, 職位,
CASE
WHEN 職位 LIKE '銷售%' THEN '銷售崗'
WHEN 職位 LIKE '軟件%' THEN '技術(shù)崗'
WHEN 職位 LIKE '人力%' THEN '人力崗'
ELSE '其他職位'
END AS 職位類別
FROM 員工;
統(tǒng)計崗位類別:
統(tǒng)計崗位人數(shù):
SELECT
SUM( CASE WHEN 職位 LIKE '%銷售%' THEN 1 ELSE 0 END ) AS 銷售崗人數(shù),
SUM( CASE WHEN 職位 LIKE '%軟件%' THEN 1 ELSE 0 END ) AS 技術(shù)崗人數(shù),
SUM( CASE WHEN 職位 LIKE '%人力%' THEN 1 ELSE 0 END ) AS 人力崗人數(shù)
FROM
員工;






