2013-09-21 66 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; 

希望這有助於您!