包含avg的Impala数学运算因AnalysisException而失败

时间:2015-05-11 09:24:51

标签: hive impala

我尝试从另一列(column_18)的平均值中减去列(avg(column_19))中的值,并将此结果作为<的第三列(result)获取表> strong>每行:

cur.execute("Select avg(column_19) - column_18 as result FROM test1")

这似乎不太好用,我收到了这个错误:

impala.error.HiveServer2Error: AnalysisException: select list expression not produced by aggregation output (missing from GROUP BY clause?): SUM(column_19) / COUNT(column_19) - column_18

我不希望将结果分组

1 个答案:

答案 0 :(得分:1)

此上下文中的

avg()aggregate function,这意味着它应用于一组行,可以使用GROUP BY子句指定(如果未指定,则为所有行) 。聚合表达式的输出是每个组的单个值,因此不会根据需要对每行应用它。

但是,您可以通过几种方式完成您尝试做的事情。我认为最简单的方法是使用avg()作为analytic function。例如,您可以执行以下操作:

select column_19, column_18, (avg(column_19) over () - column_18) as result from test1

有关聚合和分析功能如何工作的更多详细信息,请参阅文档。