Вообщем вот код на фиддле. Если убрать o.created из group by то возникает ошибка: ER_WRONG_FIELD_WITH_GROUP: Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.o.created' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
А если не убирать то выводит несколько раз одного и того же юзера, а это не нужно. Нужно вывести юзеров с аггрегацией по заказам и датой последнего заказа.
А зачем тебе это o.created? какой в нём великий смысл? ну есть у юзера три разных значения, вывести можно лишь одно - ну и какое? кстати, сортировать по нему тоже бессмысленно, и по той же причине.
Если, скажем, нужно последнее - так выводи MAX(o.created). Если любое, лишь бы было в таблице - ANY_VALUE(o.created).
А лучше вообще не выводи.
select u.name user_name,
u.phone user_phone,
sum(o.subtotal) orders_sum,
avg(o.subtotal) orders_avg,
MAX(o.created) last_order_created
from users u
inner join orders o on o.user_id = u.id
group by u.name, u.phone
Вам нужно разбить задачу на две подзадачи:
1. Найти sum и avg (это сделано);
2. Найти last_order_created
Для выполнения п.2 нужно ещё раз выполнить inner join с теме же параметрами, но без group by, отсортировав orders по created, взяв только первое значение.