2016-11-02 16 views
0

別にグループに私は現在の文計算した平均

SELECT ItemName, CONCAT(FirstName, ' ' , LastName) as AuthorName, Avg(DifRating) as 'AvgDifficuilty', Avg(EnjRating) as 'AvgEnjoyment', I.ItemID, A.AuthorID 
     FROM Rating R 
     INNER JOIN Item I ON R.ItemID = I.ItemID 
     INNER JOIN Author A ON I.AuthorID = A.AuthorID 
     INNER JOIN UserAccount UA ON A.UserID = UA.UserID 
     GROUP BY R.ItemID 

を持っているが、問題はその代わりにAvgDifficuiltyとAvgEnjoymentされ別々それは奇妙な彼らの数学を組み合わせたが表示され、それらは別々の

を有するのである方法

例えば、もし私がDifRatingsのための3と4の値を持っていて、EnjRatingsのための3と4を持っていれば、正しいのDifが3.5ですがEnjのための4を得ます。

私はItemIDでグループ化しなければならないので、この問題の解決法は、2つの平均値をグループ化して、正しく計算されるようにすることだと思いますが、平均値でグループ化できるようです。

私は

GROUP BY R.ItemID, Avg(DifRating) 

GROUP BY R.ItemID, AvgDifficuilty 

を試してみましたが、私はそれを行う方法がわからないので、両方のは、単にエラーを与えます。

TLDR:どのように私は私が病気に説明する悪い仕事をしている場合は平均数

によってグループがすべてのヘルプは大幅に私があれば知らない原因空白を埋める/ご質問にお答えしてみてください感謝し、申し訳ありませんことになるん私が望むのは可能です。

+1

このクエリは、RDBMSの他のフレーバーで実行されませんので、私はMySQLのタグが含まれています。 –

答えて

1

あなたは他のテーブルにあなた彼らの前に、まずRatingテーブルから平均値を計算する必要があります

SELECT i.ItemName, 
     i.ItemID, 
     a.AuthorID, 
     CONCAT(a.FirstName, ' ', a.LastName) AS AuthorName, 
     t.AvgDifficulty, 
     t.AvgEnjoyment 
FROM 
(
    SELECT ItemID, 
      AVG(DifRating) AS AvgDifficulty, 
      AVG(EnjRating) AS AvgEnjoyment 
    FROM Rating 
    GROUP BY ItemID 
) t 
INNER JOIN Item i 
    ON t.ItemID = i.ItemID 
INNER JOIN Author a 
    ON i.AuthorID = a.AuthorID 
INNER JOIN UserAccount ua 
    ON a.UserID = ua.UserID 
+0

はい、ありがとうございました – 1seanr