Sql server 2012 选择“请求仅保留高于平均值的结果”
尝试使用select请求工作,只选择某个列的值高于该列平均值的条目 我知道我必须将AVG()函数与GROUP BY和HAVING一起使用,但会发生以下情况:Sql server 2012 选择“请求仅保留高于平均值的结果”,sql-server-2012,Sql Server 2012,尝试使用select请求工作,只选择某个列的值高于该列平均值的条目 我知道我必须将AVG()函数与GROUP BY和HAVING一起使用,但会发生以下情况: select ProductName,UnitPrice from products group by productname,unitprice having UnitPrice>avg(unitprice) 这导致我没有任何条目 我想如果我用 select ProductName,UnitPrice from products
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)
我得到了一大堆毫无意义的东西,因为它低于平均值(知道平均值是288663)。你可以使用
AVG
覆盖整个表,使用over
:
;WITH CTE AS
(
SELECT *,
AVG(UnitPrice) OVER() AvgPrice
FROM products
)
SELECT *
FROM CTE
WHERE UnitPrice > AvgPrice;
对于包含ProductName的行,这将返回单价大于平均价格的所有行:
SELECT *
FROM (
SELECT ProductName,
UnitPrice ,
AVG(UnitPrice) OVER(PARTITION BY ProductName) Average
FROM products
) t
WHERE UnitPrice > Average;