我有两张 table :
Recipes
RecipeId | UserId |名称|等等
和
RecipeRatings
RecipeRatingId | RecipeId | UserId |评级|评论
我想选择食谱列表并包括平均评分 . 像这样的东西会起作用:
SELECT
Recipes.RecipeId,
Name,
AVG(RecipeRatings.Rating) AS AverageRating
FROM Recipes
INNER JOIN RecipeRatings
ON RecipeRatings.RecipeId = Recipes.RecipeId
GROUP BY Recipes.RecipeId, Recipes.Name
ORDER BY AverageRating DESC
但我真正喜欢的是获得平均值或当前用户评级 . 似乎我不应该打扰显示平均值,如果用户自己评价更高或更低 .
所以给定一个参数@userId,有没有办法选择一个食谱列表以及当前用户评级(如果有),否则RecipeRatings表中的平均值(如果有的话)?
拥有AverageRating和MyRating列也没关系,它将由客户端正确显示 .
1 回答
你可以试试这个:
如果你想显示
MyRating
,如果它不是null,否则AverageRating
你可以查看COALESCE
函数 .我还将您的INNER JOIN更改为LEFT JOIN,以便仍然可以在结果中显示没有任何评级的食谱 .