2017-02-12 8 views
0

以下を返すMYSQLクエリをまとめておくことができます(可能な場合)。現時点では、2つのクエリで必要なデータを抽出しますが、1つだけで達成することができれば満足しています。MYSQLクエリ、複数のテーブル(平均値)

私は2つのテーブルを持っています。使用可能なすべてのドキュメントをリストする1つのドキュメントテーブル。私はまた、さまざまな文書の評価を持つテーブルを持っています。ドキュメントごとに複数の評価があり、ドキュメントの平均評価に興味があります。

表の文書

+-------+------------+ 
| 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