Просто LEFT JOIN проходит на ура за счет использования индексов. Но потом невозможно собрать сумму, потому как amount дублируется.
Неплохо работает, если сделать обычный LEFT JOIN, группировку по t.id, а потом все это обернуть в SELECT FROM (... LIMIT 30) t GROUP BY t.offer_id
Но при таком раскладе пагинация неправильная. То есть там где LIMIT 30 записей действительно 30, но они еще раз группируются и получается не такая цифра.
Тут все в одной таблице, потому как это транзакции и у каждой должен быть свой ID.
Базу трогать тоже нельзя. Это уже рабочее, все завязано с бухгалтерией и пр.
Неплохо работает, если сделать обычный LEFT JOIN, группировку по t.id, а потом все это обернуть в SELECT FROM (... LIMIT 30) t GROUP BY t.offer_id
Но при таком раскладе пагинация неправильная. То есть там где LIMIT 30 записей действительно 30, но они еще раз группируются и получается не такая цифра.