繁体   English   中英

如何在不使用子查询、CTE 和 Prodedure 的情况下实现这一目标

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM