2016-11-19 2 views
0

Мне интересно, как запрашивать количество заказов для каждого клиента, статус которого «переупорядочен», и думаю, что у меня это довольно близко, но не совсем что я хочу сделать, потому что он подсчитывает только тех клиентов, которые «переупорядочивают» их статус, а не все клиенты (которые в противном случае должны были бы рассчитывать до 0, где «при изменении порядка» не применимо).SQL-запрос много-ко-многим отношениям count count count count 0 для тех, у кого нет

Я уверен, что мне нужно добиться этого с помощью подзапроса или соединения. Любая помощь будет оценена по достоинству. Вот то, что я до сих пор:

SELECT custName, ordNum, COUNT(*) AS reorder_count 
FROM Orders, Customers 
WHERE Orders.custNum = Customers.custNum 
AND status = 'on reorder' 
GROUP BY orderNum, custName; 

ответ

1

Никогда использовать запятые в предложении FROM. Всегда использовать явно JOIN синтаксис. Это правильно, современно и мощнее.

Вы хотите LEFT JOIN:

SELECT c.customerName, COUNT(o.orderNumber) AS reorder_count 
FROM Customers c LEFT JOIN 
    Orders o 
    ON o.customerNumber = c.customerNumber AND o.status = 'on reorder' 
GROUP BY c.customerName; 
+1

Это было очень полезно! Я буду делать все возможное, чтобы всегда использовать явный JOIN! – finiteloop