我有 3 个数据表。
在条目数据表中,我有带有 ID 的条目(entryId 作为主键)。
我有另一个名为 EntryUsersRatings 的表,其中有多个条目具有 entryId 字段和评级值(从 1 到 5)。(评级为一个 entryId 存储多次)。列:ratingId(主键)、entryId、rating(整数值)。
在第三个数据表中,我有第一个表中条目的翻译(带有 entryId、languageId 和 title - 翻译)。
我想做的是从第一个数据表中选择所有条目及其标题(按语言 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