配置单元表中的除法运算

问题描述

我是蜂巢的初学者,在尝试操作表格时遇到一些基本问题。

我有一个配置单元表

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

我有两个问题

  1. 我希望解决方案正确,例如3/2给我1应该给予1.5
  2. 如果买入或卖出的值为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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...