SQL:为什么 'Case When' 在我的代码中不起作用?

SQL: Why does 'Case When' won't work in my code?

这是我的 ER 图

我想将 business table 中的 stars 属性归类为如下内容:

我尝试使用此代码:

select case b.stars
when (b.stars >= 2.0 and b.stars <=3.0) then '2-3'
when (b.stars >= 4.0) then '4-5'
else 'none'
end stars_group
from business b

但是在这种情况下不起作用table,如何解决这个问题?

你混淆了这两种情况。您想要具有单独条件的版本:

select (case when (b.stars >= 2.0 and b.stars <= 3.0) then '2-3'
             when (b.stars >= 4.0) then '4-5'
             else 'none'
        end) as stars_group

如果您只是使用相等性,您可以使用 简单的 case 表达式——但是比较需要严格相等:

select (case trunc(b.stars)
             when 2 then 'Two'
             when 3 then 'Three'
             else 'none'
        end) as stars_group

对于不等式,您需要一个 搜索案例 ,其中评估每个 where 子句以确定返回的第一个 then。搜索的案例在casewhere之间没有表达式。