Средний рейтинг фильмов:
select r.mID, avg(stars) as avg_stars
from Rating r
group by r.mID;
Затем, чтобы ответить на вопрос, вы можете присоединить его к фильмам и использовать условную агрегацию:
select avg(case when year < 1980 then avg_stars) as avg_stars_pre1980,
avg(case when year > 1980 then avg_stars) as avg_stars_post1980,
(avg(case when year < 1980 then avg_stars) -
avg(case when year > 1980 then avg_stars) a
) as diff
from (select r.mID, avg(stars) as avg_stars
from Rating r
group by r.mID
) r join
movie m
on r.mID = m.mID
group by r.mID;
Причина, по которой выполучение NULL
происходит потому, что вы думаете , что вы разделяете псевдонимы столбцов, определенные в SELECT
.Тем не менее, вы действительно разделяете строки.Итак:
(("sumaf"/"numaf")-("sumbf"/"numbf")) as "difof"
это просто:
(('sumaf'/'numaf')-('sumbf'/'numbf')) as difof
Строки интерпретируются как числа в числовой константе, причем начальные цифры преобразуются в число.У них нет начальных цифр, поэтому все значения равны 0
, что приводит к делению на ноль.MySQL возвращает NULL
для деления на ноль вместо генерирования ошибки.