2012-05-22 1 views
1

У меня есть эта таблица «Рейтинги», содержащие USER_ID, Artist_ID и рейтинг (int, оценка, назначенная пользователем). И, конечно, таблица «Художники», среди прочего, поле «ID» и «Name».Список с именами художников, отсортированных по среднему рейтингу от таблиц MySQL

Я пытаюсь получить по убыванию с именами авторов, отсортированные по счету AVG для художников. Сначала я думал, что это будет не так сложно, но я продолжаю возиться ...

Вот где я застрял. Я должен выяснить, как он может вычислить AVG() идентификаторов, которые происходят несколько раз. И я пробовал различные запросы, используя ключевое слово DISTINCT, но не добился успеха.

Например:

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

дает мне результат:

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 

Как вы можете видеть, художник "Guido Belcanto" имеет более чем 1 рейтинг. В настоящий момент я не имею в виду, как вычислить AVG() этих идентификаторов, которые происходят более одного раза. Это, вероятно, основной MySQL, но я, возможно, искать в неправильном направлении

ответ

2

Вы забыли GROUP BY на ваш запрос и на самом деле вычисления среднего рейтинга Вы тянете в (с функцией 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

Группируйте рейтинги от исполнителя, чтобы вы могли вычислить средние рейтинги для каждой группы и присоединиться к ним, чтобы художники получили имена, связанные с каждым идентификатором.