2012-05-22 3 views
1

나는이 테이블에 USER_ID, Artist_ID 및 등급 (int, 사용자가 지정한 점수)을 포함합니다. 그리고 물론 "아티스트"테이블과 다른 "ID"및 "이름"테이블.아티스트 이름 목록 MySQL 테이블의 평균 등급순으로 정렬

당 평균 AVG 점수로 정렬하여 아티스트 이름으로 내림차순 목록을 얻으려고합니다. 처음에는 이것이 어렵지 않을 거라 생각했지만, 나는 계속 바이올린을 치기 시작했습니다 ...

여기에 내가 붙어 있습니다. 여러 번 발생하는 ID의 AVG()를 계산하는 방법을 알아 내야합니다. 그리고 DISTINCT 키워드를 사용하여 다양한 쿼리를 시도했지만 성공하지 못했습니다. 예를 들어

:

Name    Rating 
"The Mars Volta" 9.5 
"Simon Felice"  9.0 
"Laura Gibson"  8.0 
"Calexico"   7.0 
"Mira"    7.0 
"Guido Belcanto" 6.0 
"Guido Belcanto" 1.0 

당신이 볼 수 있듯이, 작가 "귀도 벨칸토는"1 개 이상의 등급이 :

SELECT Name, Rating 
FROM Artists as a 
INNER JOIN Ratings as r 
ON a.ID = r.Artists_ID 
ORDER BY r.Rating DESC; 

나에게 결과를 제공합니다. 나는 한 번 이상 발생하는 ID의 AVG()를 계산하는 방법에 대한 단서가 없습니다. 아마 기본 MySQL의이다 그러나 나는 어쩌면 당신은 당신의 쿼리에 GROUP BY을 잊었

답변

2

잘못된 방향으로 검색하고 실제로합니다 (AVG 기능)을 끌어 평가의 평균 계산 해요 :

SELECT Name, AVG(Rating) AS AVGRating 
FROM Artists as a 
INNER JOIN Ratings as r 
    ON a.ID = r.Artists_ID 
GROUP BY Name 
ORDER BY AVGRating DESC; 

비록를 아티스트 테이블의 키를 사용하여 그룹을 수행하는 것이 좋습니다 (충분한 데이터가 있으면 같은 이름의 여러 아티스트를 가질 수 있습니다).

+0

고마워요! GROUP BY는 정확히 내가 필요로하는 것이었기 때문에 기쁜 마음으로 – JSS

+0

이 필요했습니다. 답을 수락하는 것을 잊지 마십시오 : D – Toote

0

아티스트 별 등급을 그룹화하여 각 그룹에 대한 평점 평균을 계산하고이를 아티스트와 결합하여 각 ID와 연결된 이름을 가져올 수 있습니다.