@schilbert

Подзапросы. Сколько разных товаров заказывал каждый покупатель (по ФИО) в 1995 году?

Использую учебную базу Northwind. Результат возможно получить с помощью 3 таблиц: Customers, Orders и Order details.
Ключевые поля для Customers: CustomerID (для корреляции), ContactName (для получения ФИО)
для Orders: OrderID (для корреляции), CustomerID (для корреляции), Order Date (для условия)
для Order Details: OrderID (для корреляции), ProductID (для подсчета уникальных товаров)

Пока добрался до того, что могу вывести таблицу, содержащую: CustomerID, OrderID, ProductID. Но проблема в том, что я не могу получить уникальные значения. COUNT, DISTINCT, GROUP BY не получается впихнуть.

Рабочая часть кода:
SELECT
            (SELECT CustomerID
            FROM Orders
            WHERE OrderID = [ORDER Details].OrderID 
            --AND CustomerID = Customers.CustomerID
            --AND YEAR(OrderDate) = 1995    
            ) AS CID, 
            ProductID, OrderID
    FROM [ORDER Details]


Весь код:
SELECT (
    SELECT
            (SELECT CustomerID
            FROM Orders
            WHERE OrderID = [ORDER Details].OrderID 
            --AND CustomerID = Customers.CustomerID
            --AND YEAR(OrderDate) = 1995    
            ) AS CID, 
            ProductID, OrderID
    FROM [ORDER Details]
    GROUP BY ProductID
    ), ContactName
FROM Customers


Выдает такой результат: 634c3d4526997929754663.jpeg

Как это превратить в таблицу уникальных значений количества товаров?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@alexalexes
Вы просто не освоили group by. Те поля (или хитровычисляемые значения), которые не получены при помощи агрегированных функций, используемые в select и требуют группировки, нужно прописать в group by.
Чтобы count считал уникальные значения по конечной выборке, не по числу строк, в него прописывают поле или выражение, которое будет определять, как идентифицировать уникальную часть выборки.
SELECT O.CustomerID, C.ContactName, Count(distinct Od.ProductID) as Product_Unique_Count
            FROM Orders as O
            join Custimers as C on O.CustomerID = C.CustomerID
            join [Order Details] as Od on Od.OrderID = O.OrderID
            WHERE YEAR(O.OrderDate) = 1995
group by O.CustomerID, C.ContactName
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы