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

Amazon Athena中CASE语句差值超20%却返回空值的原因咨询

Athena CASE语句未返回预期值的原因分析

问题场景

在Amazon Athena中执行指定CASE语句时,当AreaBuilding与gla_sqft的绝对差值占gla_sqft的比例超过20%时,部分行的percent_diff_logic字段返回空值,而非预期的1。

执行的SQL语句

case
when gla_sqft = AreaBuilding then 0
when ((abs(AreaBuilding- gla_sqft)/gla_sqft) > 0.2) then 1 else null
end as percent_diff_logic 

测试数据

AreaBuildinggla_sqftpercent_diffpercent_diff_logic
149821000.2866666666666667

原因分析

问题核心是整数除法的截断特性:

  • AreaBuilding和gla_sqft均为整数类型,Athena中整数间的除法会直接舍弃小数部分,仅保留整数结果。
  • 以测试数据为例:abs(1498-2100)=602,602/2100作为整数除法的结果是0,0与0.2比较时不满足>0.2的条件,因此进入else分支返回null。

解决方法

只需将除法操作中的任意一个操作数转为浮点类型,确保计算得到精确的小数结果,修改后的语句示例:

case
when gla_sqft = AreaBuilding then 0
when ((abs(AreaBuilding - gla_sqft) / cast(gla_sqft as double)) > 0.2) then 1 else null
end as percent_diff_logic 

也可通过乘以1.0隐式转换为浮点型:

case
when gla_sqft = AreaBuilding then 0
when ((abs(AreaBuilding - gla_sqft) * 1.0 / gla_sqft) > 0.2) then 1 else null
end as percent_diff_logic 

内容的提问来源于stack exchange,提问作者Ming-Lun Jimmy Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:50:29