MySQL неточный расчет со средним и датой - PullRequest
0 голосов
/ 18 февраля 2020

У меня проблемы со средним временем расчета. У меня есть таблица с большим количеством записей, структура таблицы - это идентификатор пользователя, время начала и окончания работы (если вы хотите, вы можете скачать скрипт таблицы здесь ), и мне нужно получить эффективную работу среднее время каждого пользователя, поэтому я go, как это в среднем:

select iduser, sec_to_time(avg(timestampdiff(second, begin, end))) 
from test 
group by iduser;

Пока все хорошо, он возвращает:

USER1 00:25:55.9327
USER2 05:47:44.8713
USER3 03:13:43.4724

Однако проблема заключается в том, когда я попытайтесь вычислить среднее значение для всех пользователей (без группировки):

select sec_to_time(avg(timestampdiff(second,begin, end))),avg(timestampdiff(second,begin, end))
from test;

возвращает «03: 26: 18.9014», но, согласно моим расчетам, должно возвращаться 03: 09: 07.333. Я проверил с постоянными значениями и тестом Excel

select sec_to_time((time_to_sec("00:25:55.9327")+time_to_sec("05:47:44.8713")+time_to_sec("3:13:43.4724"))/3);

Пока я не понимаю, почему он возвращает '03: 26: 18.9014 ', это неточно согласно другим вычислениям. У кого-нибудь есть идея, почему это происходит?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Я понял, это статистика c основы математики, я не могу получить тот же результат, если в группах разное количество записей, у каждого пользователя должно быть одинаковое количество записей

0 голосов
/ 18 февраля 2020

Если вы выполните этот запрос

select  count(iduser) as cnt,
    sum(timestampdiff(SECOND, `begin`, `end`)) as tot,
    avg(timestampdiff(SECOND, `begin`, `end`)) as aver,
    sec_to_time(avg(timestampdiff(SECOND, `begin`, `end`))) as tim
from test ;

РЕЗУЛЬТАТ

cnt     tot         aver        tim
2903    35935951    12378.9015  03:26:18.9014

Вы получите все детали, чтобы вы могли выполнять свои собственные расчеты, и они выглядят правильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...