powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / AVG(TIMEDIFF()) почему то не работает
5 сообщений из 5, страница 1 из 1
AVG(TIMEDIFF()) почему то не работает
    #40112360
eluzh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То ли я дурак, то ли лыжи не едут...конечно первое.
Есть такой запрос, который дает верный результат в плане TIMEDIFF (на картинке)

SELECT
advertisement_id,
users.username AS никнэйм,
TIMEDIFF(trades.created_at, advertisements.created_at) AS принятие_сделки,
TIMEDIFF(trades.paid_created, trades.created_at) AS оплата_сделки,
TIMEDIFF(trades.updated_at, trades.paid_created) AS заключение_сделки
FROM users
LEFT JOIN advertisements ON users.id = advertisements.user_id
LEFT JOIN trades ON advertisements.id = trades.advertisement_id
WHERE trades.status = 'closed'
ORDER BY 2

но мне надо высчитать среднее время по всем трем пунктам, я добавил AVG и group by

SELECT
advertisement_id,
users.username AS никнэйм,
AVG(TIMEDIFF(trades.created_at, advertisements.created_at)) AS принятие_сделки,
AVG(TIMEDIFF(trades.paid_created, trades.created_at)) AS оплата_сделки,
AVG(TIMEDIFF(trades.updated_at, trades.paid_created)) AS заключение_сделки
FROM users
LEFT JOIN advertisements ON users.id = advertisements.user_id
LEFT JOIN trades ON advertisements.id = trades.advertisement_id
WHERE trades.status = 'closed'
GROUP BY 2
ORDER BY 2

но результат совсем не тот, не понимаю, что я делаю не так
...
Рейтинг: 0 / 0
AVG(TIMEDIFF()) почему то не работает
    #40112361
eluzh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот то, что я получаю при добавлении AVG
...
Рейтинг: 0 / 0
AVG(TIMEDIFF()) почему то не работает
    #40112370
Агрох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время на самом деле хранится в формате Float и AVG float и вернула. Чтобы опять получить время надо сделать соответствующий каст.
...
Рейтинг: 0 / 0
AVG(TIMEDIFF()) почему то не работает
    #40112419
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не все так просто:
https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html The SUM() and AVG() aggregate functions do not work with temporal values. (They convert the values to numbers, losing everything after the first nonnumeric character.) To work around this problem, convert to numeric units, perform the aggregate operation, and convert back to a temporal value. Examples:


SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
...
Рейтинг: 0 / 0
AVG(TIMEDIFF()) почему то не работает
    #40112433
eluzh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft
Не все так просто:
https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html The SUM() and AVG() aggregate functions do not work with temporal values. (They convert the values to numbers, losing everything after the first nonnumeric character.) To work around this problem, convert to numeric units, perform the aggregate operation, and convert back to a temporal value. Examples:


SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;


Премного благодарен. Заработало. А мне говорили, что достаточно освоить select, from, Where и считай знаешь sql 🤦🏻‍♂️
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / AVG(TIMEDIFF()) почему то не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]