Как усреднить совокупный столбец

Как мне написать запрос, который усредняет агрегат (еще одно среднее)?

Вот что у меня есть до сих пор.

SELECT AVG(stars)
FROM Rating
WHERE mID IN
    (SELECT mID
    FROM Movie
    WHERE year > 1980)
GROUP BY mID

Я хочу усреднить результат этого запроса.

Базовые данные:

(Stars,mID)

(2,104)
(3,104)
(3,107)
(5,107)
(4,108)
(2,108)
(4,108)

Я могу получить средние значения, сгруппированные по mID, с помощью приведенного выше запроса.

[AVG(stars),mID]

(2.50,104)
(4.00,107)
(3.33,108)

Теперь я хочу взять среднее значение (2,5 + 4,0 + 3,33).

Ожидаемый ответ = 3,2767

Если я правильно вас понимаю, просто удалите группу по оператору

Josh Eller 10.04.2019 18:46
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете получить общее среднее значение всех оценок как:

SELECT AVG(stars)
FROM Rating
WHERE mID IN (SELECT mID FROM Movie WHERE year > 1980);

Но вы, вероятно, хотите, чтобы каждый фильм имел одинаковый вес. Для этого нам подзапрос:

SELECT AVG(avg_stars)
FROM (SELECT AVG(stars) as avg_stars
      FROM Rating
      WHERE mID IN (SELECT mID FROM Movie WHERE year > 1980);
      GROUP BY mID
     ) r;

Этот второй ответ с подзапросом был тем, что я искал для Гордона. Спасибо!

Carson Cunningham 10.04.2019 18:53

Одна часть мне не понятна - Что означает ') r; ' в последней строке сделать? Я предполагаю, что это псевдоним рейтинговой таблицы, но я не понимаю ее функции.

Carson Cunningham 10.04.2019 21:01

@КарсонКаннингэм . . . Это псевдоним подзапроса. Некоторым базам данных требуются псевдонимы для подзапросов в предложении from.

Gordon Linoff 10.04.2019 23:35

Вы можете использовать первый результат как FROM (подзапрос) для основного среднего

select avg(my_avg)
from  (
  SELECT AVG(stars) my_avg 
  FROM Rating r 
  INNER JOIN (
      SELECT mID
      FROM Movie
      WHERE year > 1980 
  ) t on t.mID  = r.mID
  GROUP BY mID
) t2 

Другие вопросы по теме