2015-05-23 2 views
0

У меня есть таблица с информацией об искусстве называется АРТОМ и еще называемых рейтингамиMYSQL возвращение среднего из другой таблицы, даже если нет значения

artid title artist    artid userid rating 
----------------------    ----------------------- 
1  sunset paul     1  7  1 
2  cows  jane     1  10  5 

мне нужен оператор выбора, который даст мне все строки и ART и средний рейтинг, если таковые имеются, например

for example 
artid title artist averagerating 
-------------------------------------- 
1  sunset paul  3 
2  cows jane  NULL 

ближайший я получил это SELECT *, AVG (рейтинг) от искусства LEFT JOIN мнения о art.artid = reviews.artid;

но он возвращает только

artid title artist averagerating 
-------------------------------------- 
1  sunset paul  3 

Это обыкновение возвращать что-либо, что не имеет рейтинга для него в таблице рейтингов. Благодарим вас.

ответ

1

Вам нужен group by:

SELECT art.*, AVG(reviews.rating) 
FROM art LEFT JOIN 
    reviews 
    ON art.artid = reviews.artid 
GROUP BY art.artid; 

Если у вас есть функция агрегации (например, AVG()) в пункте SELECT, запрос является запросом агрегации. Без GROUP BY запрос всегда возвращает ровно одну строку.

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