Список в таблицах Mysql, которые не имеют AVG - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть две таблицы в MySQL, как это:

LOCAL

id | name


GRADE (grades given by users for each location)

id | id_local | grade

Когда я перечисляю среднюю оценку, полученную каждым местным жителем, а местный житель еще не получил никакой оценки, она не отображается в списке

Мой код такой

SELECT *, AVG(grade.grade) AS 'grade' FROM local
LEFT JOIN grade ON local.id = grade.id_local
GROUP BY grade.id_local

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Ваша проблема в том, что вы группируете по grade.id_local, а когда у местоположения нет оценок, это значение NULL.Вместо этого вы должны группировать по local.id.Также вы можете захотеть применить COALESCE к вашему значению AVG, чтобы сделать его 0, когда нет оценок.

SELECT local.id, local.name, 
       COALESCE(AVG(grade.grade), 0) AS 'grade' 
FROM local
LEFT JOIN grade ON local.id = grade.id_local
GROUP BY local.id

Вывод (для моей демонстрации):

id  name    grade
1   here    4.5
2   there   0

Демонстрация на dbfiddle

2 голосов
/ 18 апреля 2019

Вам нужно агрегировать по столбцам в таблице first :

SELECT l.*, AVG(g.grade) AS grade
FROM local l LEFT JOIN
     grade g
     ON local.id = g.id_local
GROUP BY l.id;

GROUP BY в порядке даже с SELECT l.*, предполагая, что id является уникальным или первичным ключом в local (разумное предположение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...