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

发布于 2022-09-30 23:08:53 字数 1153 浏览 20 评论 0

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 : ""

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深者入戏 2022-10-07 23:08:53

可以用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};

希望能帮助到你。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文