如何在不使用子查询、CTE 和过程的情况下实现这一点

How to achive this without using Sub Query, CTE and Prodedure

我有一个 table 有 2 个字段

CREATE TABLE Temp_tab 
(
     id int identity primary key, 
     value float
);

INSERT INTO Temp_tab(value)
VALUES (65.09),(17.09);

我想select所有大于Avg(Value)的记录。

说... 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

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

spark-sql 在版本 1 下接受此查询。6.x

select * from (select * from tenmin_history order by TS_TIME DESC limit 144) a order by TS_TIME

这个查询解决了我的问题。