Использование внутреннего объединения и группы по

#mysql #group-by #inner-join

#mysql #группировать по #внутреннее объединение

Вопрос:

У меня есть рестораны. Итак, у меня есть таблица «меню» и таблица «заказы». Я хочу найти, когда данное блюдо было заказано последним. Итак, я знаю, что в какой-то момент мне придется использовать group by dishId, но все, что я пытаюсь, возвращает ошибку. Следующий запрос работает, но он возвращает дубликаты. Мне нужен только самый последний экземпляр для каждого блюда. Обратите внимание, что моя таблица «заказы» содержит информацию о клиентах, которая меня в настоящее время не интересует.

 select o.timestamp, m.* 
from orders o 
inner join menu m 
on (o.dishId = m.dishId); 
  

Ответ №1:

Я думаю, что проблема, с которой вы столкнулись здесь, заключается в том, что вам нужно включить каждый из столбцов, по которым вы хотите сгруппировать

 select m.dishId, MAX(o.timestamp)
    from orders o 
    inner join menu m 
    on (o.dishId = m.dishId)
group by m.dishId; 
  

Если вы хотите сгруппировать по большему количеству столбцов, вы должны добавить их в обоих местах. Пример:

 select m.dishId, m.dishName, MAX(o.timestamp)
    from orders o 
    inner join menu m 
    on (o.dishId = m.dishId)
group by m.dishId, m.dishName; 
  

Комментарии:

1. Первый пример содержит бесполезное объединение и может быть написан SELECT o.dishId, MAX(o.timestamp) FROM orders o GROUP BY o.dishId