MySQL Join / sum / sort

时间:2013-09-21 13:57:12

标签: php mysql sql

嗨,谢谢你看看我的问题。

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

我想获得评分最高的前5个个人资料。我试图获得SUM(ratings.stars),其中rating.profileID = profiles.ID,但由于我不擅长MySQL,因此无法解决问题。

由于

2 个答案:

答案 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;

希望这有帮助!