2017-02-12 17 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