2015-10-21 1 views
0

Я пытаюсь создать простую систему видео-скорости для веб-сайта, используя две таблицы, видео и рейтинги. В принципе, в таблице «видео» есть видеозапись, а затем 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), так и дублированные строки.

Спасибо.

+1

Посмотрите в 'GROUP BY v.id'. – Kenney

+0

@ Kenney Вы должны опубликовать это как ответ. – Barmar

+0

@Barmar Я решил, что кто-то отметит это как дубликат - я видел это раньше :) – Kenney

ответ

0

Используйте коррелированный подзапрос:

SELECT v.*, 
     (SELECT avg(r.rate) 
     FROM ratings r 
     WHERE v.id = r.video_id 
     ) as avgrating 
FROM videos v; 
+0

Ах, я вижу! Я пытался делать подзапросы, но внутри всех видов соединений, не понимая, что могу просто поставить подзапрос наверху. Спасибо! – arielhr

+1

@arielhr Ваш оригинальный метод был в порядке, вы просто забыли 'GROUP BY v.id' – Barmar

+0

@Barmar. , , Это может быть справедливо для MySQL, но не для SQLite. –

Смежные вопросы