Я пытаюсь создать простую систему видео-скорости для веб-сайта, используя две таблицы, видео и рейтинги. В принципе, в таблице «видео» есть видеозапись, а затем 1 или n оценок для этого идентификатора видео в таблице «рейтинги». Я могу выбрать одну запись видео и добавить колонку на основе среднего значения всех рейтингов для этого видео делает:Возвратите все строки из таблицы и информацию из другой для определенной строки
SELECT v.*, avg(r.rate) FROM videos v
LEFT JOIN ratings r
ON v.id = r.video_id
WHERE v.id = 100;
Это возвращает:
id | name | file | rate
------------------------------------------
100 | Testvideo | test.avi | 4.4286
Есть 7 строк для этого идентификатора внутри " рейтинги "от целых чисел от 3 до 5, так что среднее работает как ожидалось, если конкретное видео не имеет рейтинга, оно бы выбросило нуль для столбца скорости, но все остальное проявится. Итак, у меня есть метод для одного ID прикрыл, но я не могу понять, что запрос будет, если я хочу, чтобы вернуть весь список видео в том же формате
id | name | file | rate
------------------------------------------
1 | test1 | test1.avi | 5
2 | super2 | conan.avi | null
3 | mega3 | wedding.avi | 2.1149
Я пробовал много вещей , но все они вернули либо одну строку (которая, как я полагаю, из-за функции avg), так и дублированные строки.
Спасибо.
Посмотрите в 'GROUP BY v.id'. – Kenney
@ Kenney Вы должны опубликовать это как ответ. – Barmar
@Barmar Я решил, что кто-то отметит это как дубликат - я видел это раньше :) – Kenney