2017-02-12 18 views
0

需要帮助将放在一起的MYSQL查询返回以下内容(如果可能的话)。目前,我用两个查询提取我需要的数据,但如果可以用一个查询完成,将会很高兴。MYSQL查询,多个表的平均值为

我有两个表。一个列出所有可用文档的文档表。我也有一张表格,里面有不同文件的评分。每个文档可以有多个评分,我对文档的平均评分感兴趣。

表文件

+-------+------------+ 
| docId | docTitle | 
+----+---------------+ 
| 1 | Doc1 title | 
| 2 | Doc2 title | 
+-------+------------+ 

表评论从查询

+----+------------+-----------+ 
| id | title  | avgRating | 
+----+------------+-----------+ 
| 1 | Doc1 title | 4  | 
| 2 | Doc2 title | 2,5 | 
+----+------------+-----------+ 

解决

+------------+---------------+ 
| docId  | commentRating | 
+------------+---------------+ 
| 1   | 5   | 
| 1   | 3   | 
| 2   | 1   | 
| 2   | 4   | 
+------------+---------------+ 

返回的结果! 我用这个查询得到我想要的结果:

SELECT doc.docId, doc.docTitle, doc.docThumbnail, averageRating 
    from `document` as doc 
    Left join (
     select * , avg(commentRating) 
     as averageRating from comments 
     group by comments.docId 
    ) 
    as rat On commentRating = doc.docid 
+0

我们同时改变了,但是我太慢了! – MohaMad

回答

0

如果你只需要平均值,通过聚合函数AVG(在分组查询中选择):

Select doc.docid as id , doc.docTitle , rat.average 
from document as doc 
Left join (
    select * , avg(commentRating) as average 
     -- , group_concat(rating) as allratings 
    from comments 
    group by commentDocId 
    ) as rat 
On rat.commentDocId = doc.docid 

注:allratings回报所选的docId的所有评级。如果没有用,请将其删除。

+0

谢谢你的回答!我虽然可以“翻译”我的例子以适应我的表格的实际名称,但我可以做到。我更新了我的问题,以便它包含我使用的表和列的真实姓名。你介意更新你的答案以使用这些名字吗? – stalf

+0

最后设法将这些部分放在一起以获得已接受并返回我想要的查询。感谢您的帮助! 将更新与我跑的查询问题。 – stalf