我有一个包含2个字段的表
CREATE TABLE Temp_tab
(
id int identity primary key,
value float
);
INSERT INTO Temp_tab(value)
VALUES (65.09),(17.09);
我想选择所有大于平均值(值)的记录。
说... Select * from temp_tab where value > (select avg(value) from temp_tab);
上面的查询(使用子查询)给出了预期的输出
1 65.09
我想在不使用Sub Query,CTE和Prodedure的情况下实现这一点,因为我使用的是Spark DB。 Spark Db不支持子查询,CTE和Prodedures
答案 0 :(得分:3)
使用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声称支持子查询(请参阅here)。因此,您的原始查询应该有效。如果它只支持from
子句中的子查询,那么你可以这样做:
Select t.*
from temp_tab t join
(select avg(value) as avgvalue from temp_tab) a
on t.value > a.avgvalue;
答案 1 :(得分:0)
spark-sql在1.6.x版本下接受此查询
select * from (select * from tenmin_history order by TS_TIME DESC limit 144) a order by TS_TIME
此查询解决了我的问题。