2017-02-12 5 views
0

Benötigen Sie Hilfe, um eine MYSQL-Abfrage zusammenzufassen, die Folgendes zurückgibt (wenn es möglich ist). Im Moment extrahiere ich die Daten, die ich brauche, mit zwei Abfragen, würde mich aber freuen, wenn es mit nur einem möglich wäre.MYSQL-Abfrage, mehrere Tabellen mit Durchschnitt

Ich habe zwei Tabellen. Eine Dokumententabelle, die alle verfügbaren Dokumente auflistet. Ich habe auch eine Tabelle mit Bewertungen für die verschiedenen Dokumente. Es kann mehrere Bewertungen für jedes Dokument geben und ich bin an der durchschnittlichen Bewertung für ein Dokument interessiert.

Tabelle Dokument

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

Tabelle kommentiert

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

Erhaltenes Ergebnis aus Abfrage

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

gelöst! benutzte ich diese Abfrage das Ergebnis zu erhalten, die ich wollte:

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

Wir wechselten zur gleichen Zeit, aber ich war so langsam! – MohaMad

Antwort

0

nur, wenn Sie Mittelwerte benötigt, wählen Sie es durch Aggregationsfunktion AVG() in gruppierte Abfrage:

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 

Hinweis: allratings Renditen Alle Bewertungen für ausgewählte docId. Wenn es nicht nützlich ist, entfernen Sie es.

+0

Vielen Dank für Ihre Antwort! Ich würde zwar mein Beispiel so "übersetzen" können, dass es den tatsächlichen Namen meiner Tabellen entspricht, aber ich kann es einfach. Ich habe meine Frage so aktualisiert, dass sie die tatsächlichen Namen der Tabellen und Spalten enthält, die ich verwende. Macht es Ihnen etwas aus, Ihre Antwort zu aktualisieren, um diese Namen auch zu verwenden? – stalf

+0

Schließlich schaffen es, die Stücke zusammen zu setzen, um eine Abfrage zu erhalten, die akzeptiert wurde und zurückgegeben, was ich wollte. Danke für Ihre Hilfe! Aktualisiert die Frage mit der Abfrage, die ich ausgeführt habe. – stalf