MS Access SQL 查询不包括作为聚合函数的指定表达式

MS Access SQL Query does not include specified expression as aggregated function

SELECT CarBrand.BrandName, Count(Cars.ColorName) AS CountOfGreenProducts
FROM (Cars 
INNER JOIN CarFacts ON Cars.CarKey = CarFacts.CarKey) 
INNER JOIN CarBrand ON CarFacts.BrandKey = CarBrand.BrandKey
GROUP BY CarBrand.BrandName
HAVING Cars.ColorName = "Green";

我正在尝试获取所有绿色汽车的数量,但我收到一条错误消息,指出 "Your query does not include the specified expression Cars.ColorName = "绿色“作为聚合函数的一部分” 如果您能就如何解决此错误提供任何帮助,我将不胜感激.谢谢!

只是为了扩展上面的 sgeddes 评论。

您需要将条件从 HAVING 子句移至 WHERE 子句。这样做的原因是 WHERE 子句在聚合之前执行。换句话说,数据库将在执行 COUNT(Cars.ColorName) 之前从您的 Cars table 和结果 INNER JOIN 中过滤掉任何记录。

HAVING,另一方面,过滤后聚合。这几乎是数据库对记录集采取的最后一步。因此,当您说 HAVING Cars.ColorName = "Green" 时,数据库会感到困惑,因为 Cars.ColorName 不是结果集中的字段。 CountOfGreenProducts 确实存在于结果集中,但您不能为 "Green" 过滤它,因为它是一个数字。所以数据库抛出一个错误。

所以,相反:

SELECT CarBrand.BrandName, Count(Cars.ColorName) AS CountOfGreenProducts
FROM (Cars 
    INNER JOIN CarFacts ON Cars.CarKey = CarFacts.CarKey) 
    INNER JOIN CarBrand ON CarFacts.BrandKey = CarBrand.BrandKey
WHERE Cars.ColorName = "Green"
GROUP BY CarBrand.BrandName;