Как выполнить вычисления во временной таблице с помощью MySQL?

#mysql

Вопрос:

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

Вот моя оригинальная таблица

ID неделя сумма див.
1 5 50 5
2 5 40 3
3 4 35 3
4 4 60 10
5 6 70 9

Сначала я хочу СУММИРОВАТЬ их с помощью группы по неделям и разделить сумму/div

неделя сумма див. сумма/div
5 90 8 11.25
4 95 13 7.30
6 70 9 7.77

Теперь, чтобы получить среднее значение суммы/div, которое (11.25 7.3 7.77)/3 = 8.77

Я просто хочу получить 8.77

Вот что я попробовал:

 SELECT AVG(amount/ div) from mytable GROUP BY week
 

но я не получил желаемого результата от 8.77

Комментарии:

1. Как вы думаете, почему временная таблица имеет какое-либо значение для запроса

2. Мне не нужен временный столик. Если это возможно без него, то я очень счастлив.

3. Я получаю этот #1111 - Invalid use of group function запрос об ошибке SELECT SUM(AVG(amount/ divider)) / COUNT(week) FROM test

Ответ №1:

Образец БД сделан.

http://sqlfiddle.com/#!9/6c7fa7/9

Используется FLOOR для сопоставления ваших значений 11,25, 7,3, 7,77, обычный РАУНД(…,2) получил разницу в 1 цент.

 CREATE TABLE stats (
  id INT PRIMARY KEY AUTO_INCREMENT,
  week INT,
  amount INT,
  divs INT
);

INSERT INTO stats ( week, amount, divs ) VALUES ( 5, 50, 5 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 5, 40, 3 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 4, 35, 3 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 4, 60, 10 );
INSERT INTO stats ( week, amount, divs ) VALUES ( 6, 70, 9 );

SELECT ROUND(AVG(amount_divs), 2)
FROM (
  SELECT FLOOR(100* SUM(amount)/SUM(divs))/100 AS amount_divs
  FROM stats 
  GROUP BY week
) x
 

Если вы выполните следующий запрос

 SELECT AVG(amount/divs)
FROM stats
 

Это имеет другое значение, это среднее значение всех записей (5 значений), а не 3 после SUM

Комментарии:

1. Идеально! Как раз то, что я искал