#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. Идеально! Как раз то, что я искал