Сложная аналитика обычно не считается на лету. Делай задачи по крону, разбивай на куски
Мы делаем такое на триггерах, хранимых процедурах и кеш-таблицах.
Процедура смотрит, есть ли данные в кеше, если есть - отдает, если нет - считает, кладет в кеш и отдает.
Триггера инвалидируют кеш (удаляют записи) если данные, от которых зависит резулльтат, менялись.
Но, если редкий запрос, например, менеджер раз в день смотрит, на 250к записей можно и в лоб посчитать.