Объединение MySQL и ПОДСЧЕТ в одном запросе

#mysql #sql #join #left-join

#mysql #sql #Присоединиться #соединение слева

Вопрос:

Я пытаюсь объединить 2 таблицы вместе и получить количество внешних ключей… Извините, но я действительно не знаю, как объяснить это, поэтому позвольте мне продемонстрировать:

У меня есть 1 таблица «заказы» для заказов со следующими полями:

 id, f_name, l_name, credit_card, ETC.
  

Затем у меня есть таблица ‘orders_details’ для элементов в порядке, вот так:

 id, order_id, product_id, qty
  

Теперь я хочу выполнить запрос, объединяющий 2 таблицы, получая по 1 строке на каждую строку в таблице заказов, со столбцом, сообщающим мне, сколько продуктов в каждом заказе.

Кто-нибудь знает, как этого добиться?

PS Я также хотел бы иметь возможность получить общее количество всех заказов (я не хочу запускать отдельный запрос для каждого заказа).

Ответ №1:

 SELECT o.id, o.f_name, o.l_name, COUNT(od.id), COALESCE(SUM(od.qty), 0)
FROM orders o
LEFT JOIN order_details od ON o.id = od.order_id
GROUP BY o.id, o.f_name, o.l_name
  

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

1. @John Просто помните, что если вы добавите больше столбцов в SELECT предложение, вам также нужно будет добавить их в GROUP BY

2. @John: На самом деле в MySQL вам не обязательно включать все неагрегированные столбцы / выражения в GROUP BY. MySQL позволяет вам использовать сокращенную ГРУППУ, в которую вам просто нужно включить ключевые столбцы или выражения, которые однозначно определяют все другие неагрегированные данные, которые вы выбираете. Тем не менее, я думаю, совету Фила стоит последовать, поскольку большинство других СУБД не поддерживают сокращенные ГРУППОВЫЕ BYS, и кто знает, не решите ли вы начать изучать и использовать другой диалект SQL.