SQL запросов к объединенным таблицам - PullRequest
0 голосов
/ 05 апреля 2020

В MySQL У меня есть три таблицы:

  • Customer: содержит ID, Name, Balance и Address
  • Orders: который содержит Order ID, Order Date, Shipping Date и Customer ID в качестве внешнего ключа
  • Order Lines: который содержит Order ID, Part ID и Number Ordered .

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

SELECT
  CONCAT(customer_last_name, ', ', customer_first_name) AS 'Customer',
  SUM(number_ordered) AS 'Ordered'
FROM Customers t1
  JOIN Orders t2
    ON t1.Customer_id=t2.Customer_id
  JOIN order_lines t3
    ON t2.order_id=t3.order_id;

Я довольно плохо знаком с SQL и кодированием в целом, поэтому извиняюсь, если я упустил что-то очевидное .

1 Ответ

1 голос
/ 05 апреля 2020

Что касается того, что вам нужно, вам просто нужно добавить предложение group by к этому запросу, чтобы он дал желаемый результат:

select 
    concat(c.last_name, ', ', c.first_name) as customer
    sum(oi.number_ordered) as ordered
from customers c
join orders o on o.customer_id = c.customer_id
join order_lines oi on oi.order_id = o.order_id
group by c.id, c.last_name, c.first_name

Это дает вам по одной строке на клиента вместе с сумма o number_ordered для всех товаров, которые они заказали.

Примечания:

  • псевдонимы столбцов не должны быть заключены в одинарные кавычки (которые обозначают строковые литералы); обычно в кавычках нет необходимости, если только идентификатор не содержит специальных символов, и в этом случае вы можете использовать обратные метки

  • значимые псевдонимы таблиц, облегчающие чтение и обслуживание запроса

...