Среднее абсолютное отклонение 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 
→ Ссылка