Среднее абсолютное отклонение MySQL
Не особо много информации на данную тему. Как это реализовать без подзапроса (я до них ещё не дошёл)?
-- В таблице bus_logs хранятся данные о прибытии автобусов на остановки.
-- В поле diff содержится разница в секундах относительно контрольного времени прибытия.
-- Положительные значения говорят о том, что автобус прибыл рано, отрицательные, о том, что он опоздал, 0 – приехал вовремя.
-- Получите список водителей, которые в среднем опаздывают или опережают график на 30 секунд и более.
-- Итоговая таблица должна состоять из двух колонок: driver_id с номером водителя и avg_diff со средним отклонением.
-- Среднее отклонение следует округлить до целого числа.
-- PS. В данном задании следует использовать среднее абсолютное отклонение.
SELECT driver_id, ABS(ROUND(AVG(diff), 0)) as avg_diff
FROM bus_logs
GROUP BY driver_id
HAVING avg_diff <= -30 AND avg_diff >= 30
Вот что я попытался, но получил пустоту...
Мне нужно что-то наподобие:

Ответы (1 шт):
Во-первых, HAVING avg_diff <= -30 AND avg_diff >= 30 число не может быть одновременно больше 30 и меньше -30. Во-вторых, округлённое среднее абсолютное отклонение будет ROUND(AVG(ABS(diff),0))
В итоге:
SELECT driver_id, ROUND(AVG(ABS(diff),0)) as avg_diff
FROM bus_logs
GROUP BY driver_id
HAVING avg_diff >= 30