SQL:为什么 'Case When' 在我的代码中不起作用?
SQL: Why does 'Case When' won't work in my code?
这是我的 ER 图
我想将 business
table 中的 stars
属性归类为如下内容:
- 2.0 - 3.0 星 = '2-3'
- 4.0 - 5.0 星 = '4-5'
- 其他 = 'none'
我尝试使用此代码:
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
。搜索的案例在case
和where
之间没有表达式。
这是我的 ER 图
我想将 business
table 中的 stars
属性归类为如下内容:
- 2.0 - 3.0 星 = '2-3'
- 4.0 - 5.0 星 = '4-5'
- 其他 = 'none'
我尝试使用此代码:
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
。搜索的案例在case
和where
之间没有表达式。