首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL连接在子查询上不起作用

MySQL连接在子查询上不起作用
EN

Stack Overflow用户
提问于 2012-11-25 01:15:42
回答 1查看 122关注 0票数 1

这是我的数据库:

此查询选择所有补充物:

代码语言:javascript
复制
SELECT a.id, a.name, a.image, a.url_segment, COUNT(b.id) AS reviews_count, ROUND(AVG(b.rating), 2) AS reviews_rating, (((SELECT COUNT(*) FROM reviews) * (SELECT AVG(rating) FROM reviews)) + (COUNT(b.id) * AVG(b.rating))) / ((SELECT COUNT(*) FROM reviews) + COUNT(b.id)) AS bayesian_rating
FROM (`supplements` AS a)
LEFT JOIN `reviews` AS b ON `b`.`supplements_id` = `a`.`id`
GROUP BY `a`.`id`
ORDER BY `bayesian_rating` DESC

这是来自一个子类别的所有补充物(在本例中,id = 1):

代码语言:javascript
复制
SELECT a.id, a.name, a.image, a.url_segment, COUNT(b.id) AS reviews_count, ROUND(AVG(b.rating), 2) AS reviews_rating, (SELECT text FROM reviews WHERE supplements_id = a.id ORDER BY id DESC LIMIT 1) AS reviews_latest_text, (((SELECT COUNT(*) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1)) * (SELECT AVG(rating) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1))) + (COUNT(b.id) * AVG(b.rating))) / ((SELECT COUNT(*) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1)) + COUNT(b.id)) AS bayesian_rating
FROM (`supplements` AS a)
LEFT JOIN `reviews` AS b ON `b`.`supplements_id` = `a`.`id`
WHERE `a`.`subcategories_id` =  '1'
GROUP BY `a`.`id`
ORDER BY `bayesian_rating` DESC

相同补充剂的贝叶斯评分在每个查询上应该是不同的,但在这两个查询上返回的结果是相同的。

下面是我计算第一个查询的贝叶斯评分的部分:

代码语言:javascript
复制
(((SELECT COUNT(*) FROM reviews) * (SELECT AVG(rating) FROM reviews)) + (COUNT(b.id) * AVG(b.rating))) / ((SELECT COUNT(*) FROM reviews) + COUNT(b.id)) AS bayesian_rating

关于第二个问题:

代码语言:javascript
复制
(((SELECT COUNT(*) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1)) * (SELECT AVG(rating) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1))) + (COUNT(b.id) * AVG(b.rating))) / ((SELECT COUNT(*) FROM reviews LEFT JOIN supplements ON (supplements.id = reviews.supplements_id AND supplements.subcategories_id = 1)) + COUNT(b.id)) AS bayesian_rating

由于某些原因,连接不会对结果产生任何影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-25 01:31:21

因为评论是补充剂的孩子,加入补充剂不会为评论返回任何不同的东西。

我认为这两个查询返回的结果应该是相同的。

此外,根据AVG的数学定义,术语

代码语言:javascript
复制
(SELECT COUNT(*) FROM reviews) * (SELECT AVG(rating) FROM reviews)

等同于

代码语言:javascript
复制
(SELECT SUM(rating) FROM reviews)

因此,您可以简化(并加快)您的查询,但将其替换为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13543548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档