Мне нужна помощь с выбором sql, смешивающим содержимое трех таблиц, таблицы:
Clients
client_id | name | lastname
1 | Johan | Doe
2 | Monique | Patricks
Orders
id_order | client_id
1001 | 1
1002 | 1
1003 | 2
Order_lines
id_oline | id_order | id_product
1 | 1001 | 13
2 | 1001 | 21
3 | 1001 | 312
4 | 1002 | 33
5 | 1003 | 41
5 | 1003 | 11
Я могу выполнять все простые запросы, но мне нужен более сложный, который дает мне желаемый результат:
QUERY RESULT
client_id | name | lastname | Num_products (Count rows)
1 | Johan | Doe | 4
2 | Monique | Patricks | 2
Даже не знаю, с чего начать ... Любая помощь будет оценена






Для этого вы используете агрегирование с предложением GROUP BY:
SELECT client_id, name, lastname, count(order_lines.id_oline) as Num_Products
FROM Clients
INNER JOIN Orders on clients.client_id = orders.order_id
INNER JOIN Order_Lines on Orders.id_order = Order_Lines.id_order
GROUP BY client_id, name, lastname
Это количество строк заказа, так что нет. Заказчик <-> Заказ - 1: много, а Заказ <-> Строки - 1: много. Таким образом, умножение - это именно то, что вам нужно, поскольку это, по сути, количество строк заказа на одного покупателя.
Этот код полностью не протестирован, но он должен делать именно то, что вам нужно. Я бы рекомендовал прочитать группировать по заявлениям.
Надеюсь это поможет!
SELECT c.client_id, c.name, c.lastname, COUNT(*)
FROM Clients AS c
INNER JOIN Orders AS o ON c.client_id = o.client_id
INNER JOIN Order_lines AS ol ON o.id_order = ol.id_order
GROUP BY c.client_id, c.name, c.lastname;
SELECT C.client_id,name, lastname,COUNT(OL.id_order) as num_products FROM Orders AS O
INNER JOIN Order_lines AS OL ON O.id_order=OL.id_order
INNER JOIN Clients AS C ON C.client_id=O.client_id
GROUP BY OL.id_order
Ответы только на код не приветствуются. Можете ли вы описать OP, как это работает?
http://sqlfiddle.com/#!9/af49f1/1
SELECT c.client_id, c.name, c.lastname,
count(DISTINCT order_lines.id_product) as Num_Products
FROM Clients c
LEFT JOIN Orders o
ON c.client_id = o.client_id
LEFT JOIN Order_Lines
ON o.id_order = Order_Lines.id_order
GROUP BY c.client_id
Спасибо, забыл сделать DISTINCT и ненадолго сбивал меня с толку!
Ничего себе, я просто отклонил аналогичный запрос, потому что он не работал у меня, я явно забыл, что Group By, я такой идиот. Спасибо за рекламу!