我有一个数据库,我使用查询来生成这样的中间表:
id a b
xx 1 2
yy 7 11
我想为具有<的用户计算b的标准偏差。平均(a)中
我用这种方式计算avg(a)并且它工作正常:
select avg(select a from (query to produce intermediate table)) from table;
但查询:
select stddev_pop(b)
from (query to produce intermediate table)
where a < (select avg(select a
from (query to produce intermediate table))
from table);
给我一个错误,更准确地说,我被告知无法识别来自avg的“a”(从...中选择一个)。这让我很困惑,因为它适用于上一个查询。
如果有人可以提供帮助,我将不胜感激。
编辑:
我将查询结果存储到临时表中生成中间表,但仍遇到同样的问题。 非工作查询变为:
select stddev_pop(b) from temp where a < (select avg(a) from temp);
虽然这有效:
select avg(a) from temp;
答案 0 :(得分:12)
select stddev_pop(b)
from temp x
join (select avg(a) as average from temp) y
where x.a < y.average;
基本上,配置单元不会将表缓存为变量。
答案 1 :(得分:0)
您可能需要在WHERE
子句中移动括号。试试这个:
select stddev_pop(b)
from (query to produce intermediate table)
where c < ( select avg(a)
from (query to produce intermediate table)
);
而且,您的问题涉及专栏c
;你的意思是a
吗?
更新:我今天看到了a similar question MySQL
;抱歉,我不知道Hive
。看看是否有效:
select stddev_pop(b)
from temp
where a < ( select *
from (select avg(a) from temp) x
);
答案 2 :(得分:0)
但是是的 选择stddev_pop(b) 来自临时x join(选择avg(a)作为temp的平均值)y 其中x.a&lt; y.average;
如果我们可以在物理上创建临时表并将数据选择avg(a)作为temp的平均值,那么我们就可以参考。