问题描述
我是蜂巢的初学者,在尝试操作表格时遇到一些基本问题。
我有一个配置单元表
bought sold fruit
5 0 apple
0 0 mango
3 2 orange
我希望输出为
agg fruit
0 apple
0 mango
1.5 orange
我将汇总查询写为
SELECT sold/bought as agg,fruit from table GROUP BY fruit
我有两个问题
- 我希望解决方案正确,例如
3/2
给我1应该给予1.5 - 如果买入或卖出的值为0,则应将值设为0,而不是Null或NaN。
有关如何实现此目标的任何建议。谢谢。
解决方法
嗯。我以为Hive将整数除为浮点数。如果没有,一个简单的解决方案是乘以1.0:
SELECT sold * 1.0 / bought as agg,fruit
FROM table
GROUP BY fruit
,
我已经看到蜂巢或黑斑羚的行为不稳定。为了安全起见,我会使用,SELECT cast(sold as decimal(5,1)) / cast(bought as decimal(5,1)) as agg,fruit FROM table GROUP BY fruit
如果要将数据插入十进制(5,1)列,则将结果强制转换为十进制(5,1)。我知道这很愚蠢,但我想确保安全并避免不必要的特定于版本的自动广播问题。我已经看到计算在一个版本中产生空结果,而在另一个版本中工作得很好。
在应用条件时使用CASE
表达式:
select
case
when bought = 0 or sold = 0 then 0
else 1.0 * bought / sold
end agg,fruit
from tablename
由于您没有进行任何汇总,因此不需要GROUP BY
。