You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:52:34