嗨,谢谢你看看我的问题。
问题:我有2个表,一个用于评级,一个用于配置文件。 “评级”包含一行评级,其中一行将该行与名为“profileID”的“个人资料”中的ID相关联。 'rating'有一个'星''列,其中包含一个最多5的int。
我想获得评分最高的前5个个人资料。我试图获得SUM(ratings.stars),其中rating.profileID = profiles.ID,但由于我不擅长MySQL,因此无法解决问题。
由于
答案 0 :(得分:0)
SELECT a.ID, SUM(b.stars) TotalRating
FROM profiles a
INNER JOIN ratings b
ON a.ID = b.ProfileID
GROUP BY a.ID
ORDER BY TotalRating DESC
LIMIT 5
这基本上会给出评分最高的前5个个人资料。此查询的一个问题是它不支持关系。
答案 1 :(得分:0)
总计评级会使具有100个星级评级的产品出现在具有10个五星评级的产品上方。可能更好地使用平均值来排名?
SELECT profiles.ID,AVG(stars) as avg_rating
FROM profiles,ratings
WHERE profiles.ID = ratings.profileID
GROUP BY profiles.ID
ORDER BY avg_rating DESC
LIMIT 5;
您的问题表明您要列出评分最高的个人资料。如果是这种情况,请使用COUNT(星星)而不是AVG(星星):
SELECT profiles.ID,COUNT(stars) as cnt_rating
FROM profiles,ratings
WHERE profiles.ID = ratings.profileID
GROUP BY profiles.ID
ORDER BY cnt_rating DESC
LIMIT 5;
希望这有帮助!