以下查询:SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products)
选择价格高于平均水平的所有产品。
是否可以使用聚合函数以某种方式而不是子查询(嵌套SELECT
)或公用表表达式(WITH
)来执行此操作。
我主要询问Postgres,但MySQL或SQL Server也有帮助。
像SELECT * FROM products HAVING price > AVG(price)
这样的东西,它不起作用。
答案 0 :(得分:0)
我认为答案是肯定的。
还有一行,因为答案必须至少为30个字符。
答案 1 :(得分:0)
我们可以使用内连接来实现这些。 检查以下查询。
SELECT p1.* FROM products P1
inner join (SELECT AVG(price)as price FROM products) P2 on P1.price > P2.price
答案 2 :(得分:0)
此解决方案的派生表只是能够在列别名上应用where
条件的语法糖:
select *
from (
select p.*,
avg(price) over() as avg_price
from products
) t
where price > avg_price;
答案 3 :(得分:0)
将平均结果存储在变量中,并在主查询中或任何需要的地方使用该变量。
DECLARE @avgPrice DECIMAL(5,2);
SET @avgPrice = (SELECT AVG(price) FROM products);
SELECT * FROM products WHERE price > @avgPrice;