直接选出均值以上的的hive语句呢?

avg函数大家都不陌生,可能应用的时候是这样子:
'''sql

select avg(item) from table_a 

'''
如何能够直接实现形如(不能运行)

select item_a,item_b 
from table_a
where 
    item_a>avg(item_a) and item_b<avg(item_b)
    item_a<avg(item_a) and item_b>avg(item_b)

我目前的解决是,先sql运行一遍select avg(item_a),avg(item_b) from table_a;查看结果,然后再手动写入这个值。
或者是给个select出来的值保存在变量里的例子可能也能解决这个问题。


以下是自己尝试过无果的
看过帖子有这样写的:

select item_a 
from table_a
where item_a>(select avg(item_a) from table_a))

我尝试过这样:

select item_a,item_b 
from table_a
where 
    (item_a>avg(select avg(item_a) from table_a)) and (select avg(item_b) from table_b)))
    or (item_a<avg(select avg(item_a) from table_a)) and (select avg(item_b) from table_b)))

给的结果是Unsupported SubQuery Expression


尝试过@范捷琦Jackie 大佬的回答:

set @item_a_mean=(select avg(item_a) from table_a);

报错是:Lexical error at line 2, column 5. Encountered: "@" (64), after : ""

阅读 1.4k
1 个回答

可以用User-Defined Variables,然后这么写:

SET @avg_a = (SELECT AVG(item_a) FROM table_a);
SET @avg_b = (SELECT AVG(item_b) FROM table_a);

SELECT * FROM table_a WHERE item_a > @avg_a AND item_b < @avg_b;

如果是Hive的话,可以再试试:

SET AVG_A = (SELECT AVG(item_a) FROM table_a);
SET AVG_B = (SELECT AVG(item_b) FROM table_a);

SELECT * FROM table_a WHERE item_a > ${hiveconf:AVG_A} AND item_b < ${hiveconf:AVG_B};

希望能帮助到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏