@Flutterist

Как правильно составить запрос?

Вообщем вот код на фиддле. Если убрать 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

А если не убирать то выводит несколько раз одного и того же юзера, а это не нужно. Нужно вывести юзеров с аггрегацией по заказам и датой последнего заказа.
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
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
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Вам нужно разбить задачу на две подзадачи:
1. Найти sum и avg (это сделано);
2. Найти last_order_created
Для выполнения п.2 нужно ещё раз выполнить inner join с теме же параметрами, но без group by, отсортировав orders по created, взяв только первое значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы