我有一个数据库,我用一个查询来产生这样一个中间表:
id a b
xx 1 2
yy 7 11
我想,计算B的标准差谁拥有用户<AVG(一)
我计算AVG(一)这种方式,它工作正常:
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(选择从......)不被认可。 这让我真的很困惑,因为它在前面的查询。
我将不胜感激,如果有人可以提供帮助。
编辑:
我储存在我查询的结果生成中间表到一个临时表,但仍然会碰到同样的问题。 非工作查询变为:
select stddev_pop(b) from temp where a < (select avg(a) from temp);
而这个工程:
select avg(a) from temp;
OK,一个同事帮我做这件事。 我会后万一有人运行到同样的问题的答案:
select stddev_pop(b)
from temp x
join (select avg(a) as average from temp) y
where x.a < y.average;
蜂巢基本上没有做一个表的缓存为一个变量。
您可能需要移动你的括号中的WHERE
子句。 试试这个:
select stddev_pop(b)
from (query to produce intermediate table)
where c < ( select avg(a)
from (query to produce intermediate table)
);
而且,你的问题是指一列c
; 您是不是要找a
?
更新:我看到了一个类似的问题与MySQL
今天; 对不起,我不知道Hive
。 看看这个工程:
select stddev_pop(b)
from temp
where a < ( select *
from (select avg(a) from temp) x
);
好吧,任何地方仅比FROM子句首先蜂巢犯规支持子查询。 所以你不能在where子句你有from子句来创建临时表使用子查询,你可以使用该表。 现在,如果你创建一个临时表和比你的WHERE子句中使用它,而不是指它再次所以再次它不支持运行取查询临时表。
鲍勃我认为蜂巢不会从温度(b)中支持该选择STDDEV_POP其中<(SELECT * FROM(SELECT AVG(a)由温度)x)的;
但是选择STDDEV_POP(b)由温度X加入(选择AVG(a)作为临时平均值)y,其中XA <y.average;
如果我们能在物理创建临时表,并把数据选择AVG(一)作为平均从临时成那么我们可以参考这个。