Вопрос:

Рассчитать среднее значение других средних в MySQL

mysql sql

281 просмотра

3 ответа

26 Репутация автора

У меня есть эта таблица , где я хочу , чтобы вычислить среднее время отклика от всех пользователей , основанных на cat_idи от joinна основе user_idрусской страны , которые хранятся в другой таблице.

Как правильно определить среднее время в зависимости от страны пользователя?

+---------+--------+-------+-------+-------+-------+-------+-------+-------+
| user_id | cat_id | time1 | time2 | time3 | time4 | time5 | time6 | time7 |
+---------+--------+-------+-------+-------+-------+-------+-------+-------+
|      11 |      1 | 10000 |  3500 | 10000 | 10000 |  7000 |  6000 |  6500 |
|       0 |      1 |  6139 |  2640 |  5438 |  8136 |  7157 |  8723 |  4677 |
|      11 |      3 |  7500 |  5500 | 10000 |  5500 |  7500 |  4000 |  9500 |
|       0 |      3 |  7462 |  8907 |  7513 |  4181 |  7275 |  2074 |  4444 |
|       1 |      1 |  8500 |  2000 |  8500 |  1500 | 10000 |  6500 | 10000 |
|       0 |      1 |  8885 |  7240 |  2153 |  6115 |  6330 |  6151 |  4325 |
|       1 |      1 | 10000 |  3000 | 10000 |  5500 | 10000 |  9000 | 10000 |
|       0 |      1 |  6188 |  3280 |  4725 |  5662 |  3344 |  8792 |  7560 |
|       1 |      4 |  4000 |  4500 | 10000 |  5000 |  3000 |  1500 |  2112 |
|       0 |      4 |  2750 |  4861 |  3413 |  4174 |  3080 |  3213 |  7932 |
+---------+--------+-------+-------+-------+-------+-------+-------+-------+

Я пробовал: (AVG(time1 + time 2 + ... + time7) / 7)но когда я перепроверяю результаты не верны.

Заранее благодарю за любую помощь :)

Автор: KM_ Источник Размещён: 03.03.2017 04:05

Ответы (3)


0 плюса

5330 Репутация автора

Прежде всего, есть проблема с вашей круглой скобкой, которая должна быть

AVG((time1 + time2 + ... + time7) / 7)

Затем вам может понадобиться добавить что-то в вашу группу по пунктам, в зависимости от уровня, на котором вы хотите рассчитать среднее значение.

Автор: Stefano Zanini Размещён: 03.03.2017 04:08

0 плюса

2439 Репутация автора

Вы должны сначала рассчитать среднее для строки, (time1 + time2 + ... time7)/7 а затем рассчитать среднее для всех строкAVG((time1 + time2 + ... time7)/7)

Автор: newman Размещён: 03.03.2017 04:08

0 плюса

531 Репутация автора

Решение

Я думаю, что ваша проблема в среднем. Сначала я вычислил бы сумму и количество для каждой строки и оставил соединение, чтобы добавить страну. Получив табличные данные, вы можете суммировать и делать средние значения по стране, кошке или обоим. Что-то вроде этого:

select country, cat_id, (sum(total_time)/sum(count)) as avg_response_time
from (
select a.user_id
      ,a.cat_id
      ,b.country
      ,(a.time1 + a.time2 + a.time3 + a.time4 + a.time5 + a.time6 + a.time7) as total_time
      ,7 as count
from a
left outer join b
on a.user_id = b.user_id
)
group by country, cat_id
Автор: Jeremy Real Размещён: 03.03.2017 04:14
Вопросы из категории :
32x32