选择请求只保留高于平均水平的结果

时间:2015-03-23 16:52:45

标签: sql-server-2012

尝试让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)。

2 个答案:

答案 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;