Таблица - КлиентыSQL Inner Присоединиться к группе По
id FirstName LastName
23 James Smith
24 Tom Raven
25 Bob King
Стол - Заказы
id CustomerID
30 23
31 24
32 23
33 25
Стол - Продукты
OrderID Product1 Product2 Product3
30 1 0 0
31 2 0 0
32 0 1 1
33 2 1 0
Я хочу, чтобы подсчитать общее количество продуктов для каждого клиента поэтому ответы будут следующими:
CustomerID FirstName LastName Total
23 James Smith 3
24 Tom Raven 2
25 Bob King 3
До сих пор у меня есть для запроса SQL:
SELECT Customers.id, Orders.id,
FROM Customers
INNER JOIN Orders ON Customers.id = Orders.CustomerID
INNER JOIN Products ON Orders.id = Products.OrderID
Не знаю, как подсчитать продукты, хотя.
Любая помощь будет высоко оценена.
Это странный дизайн базы данных. Вы можете его нормализовать. Таблица продуктов должна содержать продукты, а не детали заказа. Детали заказа, с другой стороны, должны быть строками в порядке, то есть одной записью на произведение в заказе. –
@onedaywhen. Нормализованный дизайн позволил бы расширять продукты, не требуя структурных изменений. Например: (order_id, product_id, количество). Я не говорю, что это правильная структура, но это указывает на нормализованный подход. – Strawberry
@onedaywhen: Вы правы; «нормализовать» - это неправильный термин. Дизайн действительно не нарушает нормальную форму. Поэтому речь идет о правильном реляционном дизайне. Продукт представляет собой объект, такой же, как пользователь или заказ, поэтому он не должен быть столбцом в таблице, а рядом. Когда вам нужно добавить пользователя, заказ или продукт, вы должны добавить строку. Однако в показанном дизайне вам нужно будет добавить столбец для одного продукта и, соответственно, внести изменения в запросы, обращающиеся к продуктам. Таким образом, речь идет не о нормализации, определяемой нормальными формами, а о хорошо структурированной реляционной базе данных. –