Impala 包含 avg 的数学运算因 AnalysisException 而失败
Impala mathematical operation containing avg fails with AnalysisException
我正在尝试从另一列 (avg(column_19)
) 的平均值中减去一列 (column_18
) 的值,并将此结果作为第三列 (result
) table 的每一行:
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
我不想对结果进行分组
avg()
在此上下文中是一个 aggregate function,这意味着它应用于一组行,可以用 GROUP BY
子句指定(或者所有行,如果不是指定的)。聚合表达式的输出是每组一个值,因此不会按需要按行应用。
但是,您可以通过几种方式完成您想要做的事情。我认为最简单的方法是将 avg() 用作 analytic function。例如,您可以执行以下操作:
select column_19, column_18, (avg(column_19) over () - column_18) as result from test1
有关聚合和分析函数如何工作的更多详细信息,请参阅文档。
我正在尝试从另一列 (avg(column_19)
) 的平均值中减去一列 (column_18
) 的值,并将此结果作为第三列 (result
) table 的每一行:
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
我不想对结果进行分组
avg()
在此上下文中是一个 aggregate function,这意味着它应用于一组行,可以用 GROUP BY
子句指定(或者所有行,如果不是指定的)。聚合表达式的输出是每组一个值,因此不会按需要按行应用。
但是,您可以通过几种方式完成您想要做的事情。我认为最简单的方法是将 avg() 用作 analytic function。例如,您可以执行以下操作:
select column_19, column_18, (avg(column_19) over () - column_18) as result from test1
有关聚合和分析函数如何工作的更多详细信息,请参阅文档。