workout97
@workout97

[MySQL]Как найти разницу между средней оценкой фильмов, выпущенных до 1980 года и средней оценкой фильмов, выпущенных после 1980 года?

нужно сначала посчитать среднюю оценку да 1980, потом после 1980 и получить их разницу, не могу сделать всё это в одном запросе, уже пытался сделать и вложеными запросами, но не пойму как сравнить эти значения:

MariaDB [rating]> select avg(c.avg_stars) from (select avg(stars) avg_stars from Movie join Rating using(mID) where year>1980 group by mID having avg(stars)) c;

получитьсь пощитать только для первого случая... yно как всё это уместить в один запрос не пойму...только начал учить sql...

spoiler
5ab7a80e99278337120342.jpeg5ab7a83a39b76722984914.jpeg
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
1. Не нужно думать что 1 запрос вместо 2 это априори хорошо.
Как правило вложенные запросы работают достаточно хреново и если нет каких-то мега значимых аргументов лучше делать 2 запроса.
Плюс есть моя личная точка зрения - не стоит убирать бизнес логику в sql запросы.
Гораздо понятней сделать функцию на вашем любимом языке программирования, которая будет считать средний рейтинг по 2м аргументам(год начала, год конца) - а разницу считать уже в скрипте.

2. если уж очень хочется
select 	
    (
      select avg(Rating.stars)  
      from Movie 
      join Rating on Rating.mID = Movie.mID
      where year < 1980 
    ) - (
      select avg(Rating.stars)  
      from Movie 
      join Rating on Rating.mID = Movie.mID
      where year >= 1980 
    ) as diff;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы