MySQL Join/sum/sort



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

问题:我有 2 个表,一个用于评级,一个用于配置文件。"ratings"包含一个评级一行,其中一列将该行与名为"profileID"的"配置文件"中的 ID 相关联。"评级"有一列"星级",包含最多 5 的 int。

我想获得评分最高的前 5 个个人资料。我试图获得 SUM(ratings.stars),其中 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 个二星评级的产品显示在具有 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(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;

希望这有帮助!

最新更新