sql server ce - SQL LEFT JOIN, Average and WHERE



所以我已经尝试了一个多星期,我把它搁置了,因为我无法让它工作,但这就是我正在努力做的事情;

从数据库中选择一个产品>使用左外部连接加载其评级并将其取平均值> 使用内部连接获取不同的信息(不是很重要,但无论如何我都会说)。

这是我查询的简化(但准确)副本 - 原始内容很长,并且其中包含不同的语言单词,因此可能会有点混乱;

SELECT 
PRODUCT.name AS Name,
PRODUCT.price AS Price,
BRAND.name AS Brand,
AVG(RATING.rating) AS Rating
FROM PRODUCT
LEFT OUTER JOIN RATING ON RATING.product_id = PRODUCT.product_id
INNER JOIN BRAND ON BRAND.brand_id = PRODUCT.brand_id
GROUP BY PRODUCT.name, PRODUCT.price, BRAND.name

以上有效,但它错过了评级的"过滤"。我希望添加WHERE AVG(RATING.rating) > 3会起作用,但遗憾的是它没有。这有什么可能做到的吗?

谢谢。

GROUP BY后尝试HAVING AVG(RATING.rating) > 3

有关更多详细信息,请参阅 MSDN 上的 HAVE。

您应该使用 HAVING 子句 WHERE子句在分组之前筛选结果集,而 HAVING 子句在分组和聚合之后筛选最终结果集。所以在WHERE子句中你不能使用聚合(在这种情况下AVG(RATING.rating)),而在HAVING中,你可以这样做。

SELECT 
PRODUCT.name AS Name,
PRODUCT.price AS Price,
BRAND.name AS Brand,
AVG(RATING.rating) AS Rating
FROM PRODUCT
LEFT OUTER JOIN RATING ON RATING.product_id = PRODUCT.product_id
INNER JOIN BRAND ON BRAND.brand_id = PRODUCT.brand_id
GROUP BY PRODUCT.name, PRODUCT.price, BRAND.name
HAVING AVG(RATING.rating) > 3

最新更新