Sql server 2012 选择“请求仅保留高于平均值的结果”

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请求工作,只选择某个列的值高于该列平均值的条目

我知道我必须将AVG()函数与GROUP BY和HAVING一起使用,但会发生以下情况:

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;