MySQL Select AVG 使用多个 WHERE 子句
MySQL Select AVG using several WHERE clauses
我有一个在线商店的搜索引擎,我想让用户有机会按评级过滤产品,直到现在我的查询如下所示:
SELECT products.*,prices.price,AVG(ratings_products.rating)
FROM products,prices,ratings_products
WHERE products.title REGEXP 'lg' AND products.active = 'yes'
AND prices.price >= '10' AND prices.price <= '298650'
AND products.cod_product = prices.id_product
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
AND ratings_products.id_product = products.cod_product
AND products.id_category = '59' LIMIT 0,1
我们的想法是按价格、特定过滤器和评级进行过滤,除评级外的所有作品。我有 table ratings_products 具有以下结构:
id | id_product | id_user | title | comment | date | rating
1 | 18 | 65 |awesome| some |12344 | 85
2 | 18 | 84 |cool | great |12345 | 20
现在我需要将 AVG 计算到 return 85 到 20 之间的平均值,但是查询是 returning NULL,如果我删除 ratings_products.rating <= 59
它会给我结果但是不是计算平均值。
感谢任何帮助
谢谢
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
这意味着您需要 40 到 59 之间的值。您在示例中显示 20 和 85,两者都不在您查询的范围内,因此结果为 NULL
删除 AND ratings_products.ratings <= 59
部分会留下一个查询评分高于 40,即 85,就其本身而言,无需平均。
我是不是遗漏了什么或者您查询的值有误?
我有一个在线商店的搜索引擎,我想让用户有机会按评级过滤产品,直到现在我的查询如下所示:
SELECT products.*,prices.price,AVG(ratings_products.rating)
FROM products,prices,ratings_products
WHERE products.title REGEXP 'lg' AND products.active = 'yes'
AND prices.price >= '10' AND prices.price <= '298650'
AND products.cod_product = prices.id_product
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
AND ratings_products.id_product = products.cod_product
AND products.id_category = '59' LIMIT 0,1
我们的想法是按价格、特定过滤器和评级进行过滤,除评级外的所有作品。我有 table ratings_products 具有以下结构:
id | id_product | id_user | title | comment | date | rating
1 | 18 | 65 |awesome| some |12344 | 85
2 | 18 | 84 |cool | great |12345 | 20
现在我需要将 AVG 计算到 return 85 到 20 之间的平均值,但是查询是 returning NULL,如果我删除 ratings_products.rating <= 59
它会给我结果但是不是计算平均值。
感谢任何帮助
谢谢
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
这意味着您需要 40 到 59 之间的值。您在示例中显示 20 和 85,两者都不在您查询的范围内,因此结果为 NULL
删除 AND ratings_products.ratings <= 59
部分会留下一个查询评分高于 40,即 85,就其本身而言,无需平均。
我是不是遗漏了什么或者您查询的值有误?