Есть 2 таблицы: "Заказы" и "Покупатели". Составить sql запрос, который выдает число заказов для каждого покупателя, одна строка на покупателя.
Здравствуйте, efrm84, Вы писали:
E>Есть 2 таблицы: "Заказы" и "Покупатели". Составить sql запрос, который выдает число заказов для каждого покупателя, одна строка на покупателя.
Select Покупатель, (selecy count(*) from Заказы Where Покупатель = t1.Покупатель)
from Покупатели as t1
... << RSDN@Home 1.2.0 alpha rev. 741>>
> Есть 2 таблицы: "Заказы" и "Покупатели". Составить sql запрос, который
> выдает число заказов для каждого покупателя, одна строка на покупателя.
Ну это совсем просто
-- Простой запрос, но придется перечислять все столбцы
-- Однако нет проблем с производительностью, и любой сервер
-- обслужит этот запрос наилучшим образом.
SELECT C.CustomerID, C.FirstName, count(O.*) AS OrderCount
FROM Customers C
LEFT JOIN Orders O
ON O.CustomerID = C.CustomerID
GROUP BY C.CustomerID, C.FirstName
-- Использование подзапросов.
-- Некоторые сервера несмогут правильно
-- составить план запроса, и выборка будет
-- производиться долго. Еще не все сервера
-- поддерживают вложенные запросы таким образом
SELECT C.*,
(SELECT count(*) FROM Orders
WHERE Orders.CustomerID = C.CustomerID
) AS OrderCount
FROM Customers C
-- Группировка и объединение
-- С таким запросом тоже не возникает проблем
-- но вместо нулей будет NULL. Однако это легко исправить
-- если выбирать COALESCE(X.OrderCount, 0) AS OrderCount
SELECT C.*, X.OrderCount
FROM Customers C
LEFT JOIN (
SELECT CustomerID, count(*) AS OrderCount FROM Orders
GROUP BY CustomerID
) X ON X.CustomerID = C.CustomerID
Posted via RSDN NNTP Server 2.1 beta