运行不带子查询的查询以产生结果

Posted

技术标签:

【中文标题】运行不带子查询的查询以产生结果【英文标题】:Run a query with out a subquery to yield results 【发布时间】:2017-04-13 15:25:01 【问题描述】:

'MotorVehicles' Table

我运行了一个查询来查找附加表的“AVG(Price) * 2”,然后我运行了另一个查询,我用一个硬数字替换了“AVG(Price) * 2”,我能够得到这两条记录在结果表中,我尝试在“Having”子句中使用聚合函数,但结果表返回为空。需要一些帮助我想制定一个不带子查询的 SELECT 语句,以在附表中查找价格大于或等于 'AVG(Price * 2)' 的所有机动车辆。

提前致谢

【问题讨论】:

那么你尝试了什么? 您至少需要两个查询才能将结果放在一起。 或者窗口函数 【参考方案1】:

很多方法,这不是很好,但它会工作:

;with cte_a as
(
    select avg(Price)*2 [Average]
    from yourTable
    -- or whatever your query to get average is as long as only 1 result
)
select *
from yourTable yt
inner join cte_a a on 1 = 1
where price >= a.Average

【讨论】:

【参考方案2】:
select * from MotorVehicles where price > (select avg(price) from t)*2;

如果这是您要避免的子查询,我深表歉意。

【讨论】:

【参考方案3】:

您可以使用分区的 AVG() 获得类似的结果。

DECLARE @T TABLE
(
    X INT
)

INSERT @T SELECT 1
INSERT @T SELECT 10
INSERT @T SELECT 15
INSERT @T SELECT 20

SELECT X,XAVG=AVG(X) OVER(PARTITION BY 1 ) FROM @T   

导致:

X   XAVG
1   11
10  11
15  11
20  11

【讨论】:

以上是关于运行不带子查询的查询以产生结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql update更新带子查询的实现方式

带子查询的redshift sql查询中的语法错误

子查询时间比较

(My)SQL:如果子查询不是空集,则返回子查询

sql子查询

MYSQL基础九--子查询和连接