select 记录值 < avg() - 不正确的结果

select records where value < avg() - incorrect results

我正在 NORTHWND db 上做一些基本练习。我想执行以下代码:

SELECT        
    sum(SaleAmount) AS SaleAmount
    , CompanyName

FROM      [Sales Totals by Amount]

where [SaleAmount] > 
(
        Select
        avg(SaleAmount) as SaleAmount
        from [Sales Totals by Amount]
)
group by CompanyName

平均值等于 4409,4948。当我试图获得大于平均结果的值时,结果是正确的。当我试图获得低于平均值的值时,它 returns 值低于和高于平均值。 如果您指出我的错误在哪里,我将不胜感激。

要将过滤器应用于聚合公式,您可以使用 HAVING 关键字:

SELECT        
    SUM(SaleAmount) AS SaleAmount,
    CompanyName
FROM      [Sales Totals by Amount]
GROUP BY CompanyName
HAVING sum(SaleAmount)  > 
(
        Select
        AVG(SaleAmount) as SaleAmount
        FROM [Sales Totals by Amount]
)

您也可以使用 CTE 解决此问题:

;WITH TotalSalesByCompany AS (
    SELECT SUM(SaleAmount) AS TotalSaleAmount,
           CompanyName
      FROM [Sales Totals by Amount]
     GROUP BY CompanyName
)
SELECT * 
  FROM TotalSalesByCompany
 WHERE [TotalSalesAmount] > 
       (SELECT AVG(SalesAmount) AS AverageSales FROM [Sales Totals By Amount])

CTE 按公司生成总计列表,SELECT 子句选择总销售额大于平均值的每个公司。