Я думаю, что один элемент, который вы пропустили, который мог сбить с толку других, - это фактический счет игры, против которой играла данная команда. Итак, в основном вам нужна одна команда, и в течение сезона вам нужно среднее количество очков, которые они набрали ...
select
t.teamnumber,
t.teamname,
avg( s.totalpoints ) TeamAvgPoints
from
teams t
join matches m
on t.teamnumber = m.teamnumber
join scored s
on m.matchresultid = s.matchresultid
where
t.teamnumber = SomeValue
Если вы хотите сравнить средние значения по ВСЕМ командам, игнорируйте предложение WHERE и просто создайте группу по ...
group by
t.teamnumber,
t.teamname
Если в забитой таблице есть несколько строк на игру, то для каждой игры необходимо предварительно выполнить агрегацию, чтобы сначала набрать общее количество очков, ТОГДА получить среднее ... что-то вроде
select
PreQuery.TeamNumber,
PreQuery.TeamName,
avg( ifnull( PreQuery.MatchTotalPoints, 0 ) ) AvgPerGame
from
( select
t.teamnumber,
t.teamname,
m.matchresultid,
count(*) MatchTotalPoints
from
teams t
left join matches m
on t.teamnumber = m.teamnumber
left join scored s
on m.matchresultid = s.matchresultid
where
t.teamnumber IN( SomeValue, AnotherValue, MoreValues, EtcValue )
group by
t.teamnumber,
t.teamname,
m.matchresultid ) PreQuery
group by
PreQuery.TeamNumber,
PreQuery.TeamName
В ЭТОЙ версии запроса, если вы хотите сравнить все команды, удалите внутреннее предложение WHERE для конкретной команды и примените группу к запросу OUTER по номеру команды и имени команды.
Чтобы получить ваш дополнительный квалификатор для всего списка, я изменил на ЛЕВЫЕ соединения и закончил с IFNULL () для среднего ...