尝试让select请求工作,只选择某个列的值高于此列的平均值的条目。
我知道我必须在GROUP BY和HAVING中使用AVG()函数,但这是发生的事情:
select ProductName,UnitPrice from products
group by productname,unitprice
having UnitPrice>avg(unitprice)
这导致我根本没有参赛作品。
如果我使用
select ProductName,UnitPrice from products
group by productname,unitprice
having UnitPrice>=avg(unitprice)
我得到了一大堆没有意义的东西,因为它低于平均值(知道平均值是28,8663)。
答案 0 :(得分:1)
您可以使用AVG
OVER
;WITH CTE AS
(
SELECT *,
AVG(UnitPrice) OVER() AvgPrice
FROM products
)
SELECT *
FROM CTE
WHERE UnitPrice > AvgPrice;
答案 1 :(得分:0)
这将返回UnitPrice大于具有ProductName的行的平均价格的所有行:
SELECT *
FROM (
SELECT ProductName,
UnitPrice ,
AVG(UnitPrice) OVER(PARTITION BY ProductName) Average
FROM products
) t
WHERE UnitPrice > Average;