[英]How to achive this without using Sub Query, CTE and Prodedure
我有一个包含 2 个字段的表
CREATE TABLE Temp_tab
(
id int identity primary key,
value float
);
INSERT INTO Temp_tab(value)
VALUES (65.09),(17.09);
我想选择所有大于 Avg(Value) 的记录。
说... Select * from temp_tab where value > (select avg(value) from temp_tab);
上面的查询(使用子查询)给了我预期的输出
1 65.09
我想在不使用子查询、CTE 和 Prodedure 的情况下实现这一点,因为我使用的是 Spark DB。 Spark Db 不支持子查询、CTE 和 Prodedures
您可以使用cross join
和聚合非常痛苦地做到这一点:
Select t1.id, t1.value
from temp_tab t1 cross join
temp_tab t2
group by t1.id, t1.value
having t1.value > avg(t2.value);
请注意:Spark SQL 声称支持子查询(请参阅此处)。 因此,您的原始查询应该可以工作。 如果它只支持from
子句中的子查询,那么你可以这样做:
Select t.*
from temp_tab t join
(select avg(value) as avgvalue from temp_tab) a
on t.value > a.avgvalue;
spark-sql 在 1.6.x 版本下接受这个查询
select * from (select * from tenmin_history order by TS_TIME DESC limit 144) a order by TS_TIME
这个查询解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.