您好,感谢您查看我的问题。
问题:我有 2 张表,一张用于评级,一张用于配置文件。'ratings' 包含一个评级,该行带有一列,该列将该行与名为“profileID”的“profiles”中的 ID 相关联。“ratings”有一列“stars”,其中包含最多 5 个整数。
我想获得评分最高的前 5 个配置文件。我试图获得 SUM(ratings.stars) where rating.profileID = profiles.ID 但这不起作用,因为我不擅长 MySQL。
谢谢
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 个配置文件。这个查询的一个问题是它不支持关系。
合计评分将使具有 100 个 2 星评级的产品出现在具有 10 个 5 星评级的产品之上。使用平均排名可能更好?
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(stars) 而不是 AVG(stars):
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;
希望这可以帮助!