with top_20 as (
select
max(price)*0.8 as price1
from
<tableName>
)
select * from <tableName> t1 , top_20 t2 where t1.price > t2.price1;
select
name,
price
from
(select
name,
price,
max(price)*0.8 over (order by price) as top_20
from <tableName>
) t1
where
t1.price > t1.top_20;
下面的查询在配置单元中不起作用-
select * from <tableName> where price > (select max(salary)*0.8 from <tableName>)
select * from <tableName> t1 where exists (select salary from <tablename> t2 where t1.salary > t2.salary*0.8)
原因-配置单元不支持where子句中具有相等条件的子查询,它支持with only in、not in、exists和not exists。 即使有exists和not exists,它也只支持equijoin,请参阅https://cwiki.apache.org/confluence/display/hive/languagemanual+subqueries#languagemanualsubqueries-有关详细信息,请参阅where子句中的子查询 希望这有帮助。
3条答案
按热度按时间tf7tbtn21#
这里有一个方法,你可以做到这一点,而不必使用
join
.t3irkdon2#
下面是问题-
下面的查询在配置单元中不起作用-
原因-配置单元不支持where子句中具有相等条件的子查询,它支持with only in、not in、exists和not exists。
即使有exists和not exists,它也只支持equijoin,请参阅https://cwiki.apache.org/confluence/display/hive/languagemanual+subqueries#languagemanualsubqueries-有关详细信息,请参阅where子句中的子查询
希望这有帮助。
s8vozzvw3#
你不需要连接就可以做到。用解析函数计算
max(price)
,取80%,然后使用过滤器价格>80%:结果:
用你的table代替
WITH
子查询,必要时按id添加订单。