@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

А если не убирать то выводит несколько раз одного и того же юзера, а это не нужно. Нужно вывести юзеров с аггрегацией по заказам и датой последнего заказа.
  • Вопрос задан
  • 508 просмотров
Решения вопроса 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, взяв только первое значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы