1

您好,感谢您查看我的问题。

问题:我有 2 张表,一张用于评级,一张用于配置文件。'ratings' 包含一个评级,该行带有一列,该列将该行与名为“profileID”的“profiles”中的 ID 相关联。“ratings”有一列“stars”,其中包含最多 5 个整数。

我想获得评分最高的前 5 个配置文件。我试图获得 SUM(ratings.stars) where rating.profileID = profiles.ID 但这不起作用,因为我不擅长 MySQL。

谢谢

4

2 回答 2

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 个配置文件。这个查询的一个问题是它不支持关系。

于 2013-09-21T14:00:54.163 回答
0

合计评分将使具有 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;

希望这可以帮助!

于 2013-09-21T15:03:59.743 回答