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 и мою версию. Кажется, что они в значительной степени эквивалентны, хотя опасно делать выводы по такому небольшому набору данных.

план выполнения запроса

Другие вопросы по тегам