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