SQL Server 2012 Express Как извлечь информацию из одного столбца и сравнить ее с другим с ограничением выражения
Извините, я пытаюсь сказать это правильно. По сути, я пытаюсь сравнить один столбец из таблицы с другим столбцом из таблицы, чтобы проверить и увидеть, сколько строк в этом втором столбце. Я использую образец базы данных Northwind и вопрос заключается в следующем.
Список всех клиентов (включая CustomerId
а также Company Name
) которые разместили менее 5 заказов.
- Включите тех клиентов, которые разместили 0 заказов. Назовите поле подсчета "OrderCount."
- Заказ по количеству размещенных заказов в обратном порядке.
Я абсолютно застрял на этом.
2 ответа
Это может иметь имена немного не так.
SELECT c.CustomerId, c.[Company Name], ISNULL(OrderSum.OrderCount,0) AS OrderCount
FROM Customers c
LEFT JOIN (SELECT CustomerId, Count(1) OrderCount
FROM Orders
GROUP BY CustomerId) OrderSum
ON c.CustomerId = OrderSum.CustomerId
WHERE ISNULL(OrderSum.Cnt, 0) < 6
ORDER BY 2
Хотя ответ JBrooks выглядит отлично, я бы пошел на это
SELECT c.CustomerId, c.[Company Name], COUNT(o.Customer_id) as OrderCount
FROM Customer c
LEFT JOIN Orders o
ON o.CustomerId = c.CustomerId
GROUP BY c.CustomerId, c.[Company Name]
HAVING COUNT(o.Customer_id) < 6
ORDER BY 2
И теперь мне интересно, какой из них более эффективен... Завтра я установлю Northwind, если найду время...
ОБНОВЛЕНИЕ: Установил Northwind и попробовал и JBrooks и мою версию. Кажется, что они в значительной степени эквивалентны, хотя опасно делать выводы по такому небольшому набору данных.