Hive SQL中的嵌套查询

S4M*_*S4M 7 sql hive

我有一个数据库,我使用一个查询来生成这样的中间表:

id    a      b    
xx    1      2    
yy    7      11    
Run Code Online (Sandbox Code Playgroud)

我想为有<avg(a)的用户计算b的标准偏差

我用这种方式计算avg(a)并且它工作正常:

select avg(select a from (query to produce intermediate table)) from table;
Run Code Online (Sandbox Code Playgroud)

但查询:

select stddev_pop(b) 
from (query to produce intermediate table) 
where a < (select avg(select a 
                     from (query to produce intermediate table))
          from table);
Run Code Online (Sandbox Code Playgroud)

返回给我一个错误,更准确地说,我被告知avg中的"a"(从...中选择一个)不被识别.这让我很困惑,因为它适用于上一个查询.

如果有人可以提供帮助,我将不胜感激.

编辑:

我存储了我的查询结果,将中间表生成到临时表中,但仍遇到同样的问题.非工作查询变为:

select stddev_pop(b) from temp where a < (select avg(a) from temp);
Run Code Online (Sandbox Code Playgroud)

虽然这有效:

select avg(a) from temp;
Run Code Online (Sandbox Code Playgroud)

S4M*_*S4M 12

好的,一位同事帮我做了.我会发布答案以防有人遇到同样的问题:

select stddev_pop(b)
from temp x
join (select avg(a) as average from temp) y
where x.a < y.average;
Run Code Online (Sandbox Code Playgroud)

基本上,配置单元不会将表缓存作为变量.