2013-09-21 64 views
1

嗨,谢谢你看看我的问题。MySQL加入/总结/排序

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

我想获得评级最高的前5个配置文件。我试图得到SUM(ratings.stars)其中rating.profileID = profiles.ID,但由于我不擅长于MySQL,所以不起作用。

感谢

回答

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型材具有最大的收视率。这个查询的一个问题是它不支持关系。

+0

看起来你似乎在不断地改变你接受的答案。你有任何问题吗? –

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; 

希望这有助于您!