如何在不使用子查询、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
这个查询解决了我的问题。
我有一个 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
这个查询解决了我的问题。