2013-09-21 11 views
1

안녕하세요. 제 문제를 살펴 주셔서 감사합니다.MySQL Join/sum/sort

문제 : 나는 2 개의 테이블을 가지고 있는데 하나는 등급을, 다른 하나는 프로파일을위한 것입니다. '등급'에는 행에 'profileID'라는 '프로필'의 ID가있는 행을 연결하는 열이 하나씩 포함되어 있습니다. '등급'에는 최대 5 개의 int가 포함 된 '별'열이 있습니다.

가장 높은 평점을 가진 상위 5 개의 프로필을 가져오고 싶습니다. rating.profileID = profiles.ID가있는 SUM (ratings.stars)을 얻으려고했으나 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

등급을 합산하면 등급이 5 개이고 제품에 2 개의 별표가 100 개 표시됩니다. 아마도 순위에 대한 평균을 사용하는 것이 더 좋을까요?

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; 

귀하의 질문에 가장 높은 등급의 프로필을 나열하려고한다고 나와 있습니다. 그렇다면 AVG (별) 대신 COUNT (별표)를 사용하십시오.

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; 

희망이 있습니다.