MySQL/Presto多CASE WHEN条件添加及语法错误解决问询
在MySQL/Presto的CASE WHEN中添加多条件的问题解决
错误原因
你使用的是简单CASE表达式(case category when ...),这种语法的逻辑是将category字段与when后的值逐一执行相等比较。而你写的when 'HIGH' or 'VERY HIGH' then 1中,'HIGH' or 'VERY HIGH'是一个逻辑表达式,它的计算结果是布尔值(非空字符串在布尔判断中视为true),但category是字符串类型,字符串与布尔值无法进行相等比较,因此触发类型不匹配的错误。
解决方法
改用搜索式CASE表达式,直接在when后写完整的布尔判断条件,支持OR或IN来匹配多个值,两种写法都可行:
写法1:使用IN匹配多个值(简洁高效)
Row_Number() over( partition by id order by case when category in ('HIGH', 'VERY HIGH') then 1 when category = 'MEDIUM' then 2 when category = 'LOW' then 3 end )
写法2:使用OR逐一判断
Row_Number() over( partition by id order by case when category = 'HIGH' or category = 'VERY HIGH' then 1 when category = 'MEDIUM' then 2 when category = 'LOW' then 3 end )
搜索式CASE表达式不依赖字段与固定值的相等匹配,而是直接判断每个when后的布尔条件,因此能灵活处理多分支、多条件的场景,在MySQL和Presto中都完全兼容。
内容的提问来源于stack exchange,提问作者user18398254
相关产品推荐
相关产品推荐

