2012-10-23 37 views
2

我有3個數據表。從其他數據表中選擇平均評分

在條目數據表中我有條目ID(entryId作爲主鍵)。

我有另一個名爲EntryUsersRatings的表中有多個條目具有entryId字段和評級值(從1到5)。 (對於一個entryId,評分存儲多次)。 列:ratingId(主鍵),entryId,等級(整數值)。

在第三個數據表中,我翻譯了第一個表中的條目(帶有entryId,languageId和title - translation)。

我想要做的是從第一個數據表中選擇所有條目及其標題(按語言ID)。 最重要的是,我希望存儲在EntryUsersRatings中的每個條目(可以存儲多次)的平均評分。

我已經試過這樣:

SELECT entries.entryId, EntryTranslations.title, AVG(EntryUsersRatings.rating) AS AverageRating 
FROM entries 
    LEFT OUTER JOIN 
     EntryTranslations ON entries.entryId = EntryTranslations.entryId AND EntryTranslations.languageId = 1 
    LEFT OUTER JOIN 
     EntryUsersRatings ON entries.entryId = EntryUsersRatings.entryId 
     WHERE entries.isDraft=0 
    GROUP BY title, entries.entryId 

isDraft是隻是一些這意味着條目不與存儲所需的所有信息(只是不完整的數據 - 不相關的爲我們的情況在這裏)。

任何幫助將不勝感激。

編輯:我的解決方案給了我空值爲評級。 Edit1:這個查詢工作正常,我正在查找錯誤的數據庫。 我們也來到了另一種解決方案,這給了我們同樣的結果(我希望有人會發現這很有用):

SELECT entries.entryId, COALESCE(x.EntryUsersRatings, 0) as averageRating 
    FROM entries 
    LEFT JOIN(
    SELECT rr.entryId, AVG(rating) AS entryRating 
    FROM EntryUsersRatings rr 
    GROUP BY rr.entryId) x ON x.entryId = entries.entryId 
+1

究竟是怎麼了? – Flo

+0

您發佈的查詢有什麼問題?任何錯誤?不是理想的結果? –

+0

哦,我忘了提到這一點。 我的解決方案的評級始終爲空。 – CyberHawk

回答

0

@Cyber​​Hawk:如您使用左外的條目加入,你的結果將給所有記錄從左表和與右表的連接條件匹配的記錄。但對於不匹配的記錄,它會給你一個空值。

退房以下鏈接的DETA:

http://msdn.microsoft.com/en-us/library/ms187518(v=sql.105).aspx

+1

但是,我沒有從右表中得到任何結果...這是我的問題的來源。 – CyberHawk

+0

嘗試使用以下查詢 SELECT e。 ENTRYID等。標題,AVG(歐盟評級)FROM條目LEFT OUTER JOIN EntryUsersRatings eu ON eu.entryId = e.entryId LEFT OUTER JOIN EntryTranslations et ON et。 entryId = e.entryId WHERE et。 languageId = 1 AND e.isDraft = 0 GROUP BY eu。評級,例如。 entryId等。標題 – RVD