首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hive SQL中的嵌套查询

Hive SQL中的嵌套查询
EN

Stack Overflow用户
提问于 2012-11-30 01:22:27
回答 3查看 30.3K关注 0票数 8

我有一个数据库,我使用一个查询来生成一个中间表,如下所示:

代码语言:javascript
复制
id    a      b    
xx    1      2    
yy    7      11    

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

我这样计算avg(a),它工作得很好:

代码语言:javascript
复制
select avg(select a from (query to produce intermediate table)) from table;

但是查询:

代码语言:javascript
复制
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 a from...)不被识别。这真的让我很困惑,因为它在前面的查询中是有效的。

如果有人能帮上忙,我将不胜感激。

编辑:

我将查询的结果存储到一个临时表中以生成中间表,但仍然遇到了相同的问题。非工作查询变为:

代码语言:javascript
复制
select stddev_pop(b) from temp where a < (select avg(a) from temp);

在此过程中:

代码语言:javascript
复制
select avg(a) from temp;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-30 18:27:15

好的,一个同事帮我做的。我会把答案贴出来,以防有人遇到同样的问题:

代码语言:javascript
复制
select stddev_pop(b)
from temp x
join (select avg(a) as average from temp) y
where x.a < y.average;

基本上,hive不会将表作为变量进行缓存。

票数 13
EN

Stack Overflow用户

发布于 2012-11-30 01:43:26

您可能需要移动WHERE子句中的圆括号。试试这个:

代码语言:javascript
复制
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 questionMySQL在一起;对不起,我不认识Hive。看看这是否起作用:

代码语言:javascript
复制
select stddev_pop(b) 
from   temp 
where  a < ( select *
             from (select avg(a) from temp) x
          );
票数 0
EN

Stack Overflow用户

发布于 2013-12-05 14:34:50

好的,首先,配置单元只支持from子句以外的任何地方的子查询。所以你不能在where子句中使用子查询,你必须在from子句中创建一个临时表,而你可以使用该表。现在,如果您创建了一个临时表,然后在where子句中使用它来引用该临时表,那么它必须再次运行获取查询,因此它将再次不支持。

我认为配置单元不会支持这个select stddev_pop(b) from temp where a< (select * from ( select avg(a) from temp) x );

但是是的,select stddev_pop(b) from temp x join (select avg(a) as average from temp) y其中x.a < y.average;

如果我们可以物理地创建一个临时表,并将数据从temp中选择avg(a)作为平均值,那么我们就可以引用这个表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13631259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档