Select 请求仅保留高于平均水平的结果

Select request keep only above average results

尝试让 select 请求工作 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)

我得到了一大堆毫无意义的东西,因为它低于平均水平(知道平均水平是 28,8663)。

您可以使用 AVG 在整个 table 上使用 OVER:

;WITH CTE AS
(
    SELECT  *,
            AVG(UnitPrice) OVER() AvgPrice
    FROM products
)
SELECT *
FROM CTE
WHERE UnitPrice > AvgPrice;

这将 return 所有单价大于 ProductName 行的平均价格的行:

SELECT *
FROM (
        SELECT  ProductName,
                UnitPrice ,
                AVG(UnitPrice) OVER(PARTITION BY ProductName) Average
        FROM products
    ) t
WHERE UnitPrice > Average;