Написать запрос SQL по базе Northwind (решить задачу)

Какой продавец (EmployeeID) поставил рекорд: обслужил больше всего клиентов (customerID) в течение месяца?

select top(1) max(number) as cust_numb, EmployeeID
from (
    select EmployeeID, count(customerID) number, month(OrderDate) AS месяц
    from orders
    group by EmployeeID, month(OrderDate)
    ) As tab
group by EmployeeID
order by cust_numb desc 

А какими способами еще можно было решить эту задачу?

UPD. Решил. Первое решение было не совсем верным

select top(1) max(number) as cust_numb, EmployeeID, месяц, год
from (
    select EmployeeID, count(distinct customerID) number, month(OrderDate) AS месяц, YEAR(OrderDate) AS год
    from orders
    group by EmployeeID, month(OrderDate), YEAR(OrderDate)
    ) As tab
group by EmployeeID, месяц, год
order by cust_numb desc

Ответы (2 шт):

Автор решения: Mtigo

Простите, не могу понять, а зачем надо было создавать еще одну таблицу? У меня вот такое решение работает.

SELECT TOP 1 EmployeeID,  YEAR(OrderDate) as year, MONTH(OrderDate) as month, count(distinct customerID) as customer_amount, COUNT(*) as amount_orders
FROM Orders
GROUP BY EmployeeID, YEAR(OrderDate), MONTH(OrderDate)
ORDER BY customer_amount DESC

Получаеся как и в Вашем решении продавец ID - 2, год - 1998, месяц - 4, количесто уникальных клиентов - 18, общее количество заказов - 18

→ Ссылка
Автор решения: Senior Pomidor

С использованием оконных функций:

SELECT TOP 1 EmployeeID, COUNT(DISTINCT customerID) AS cust_numb
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY EmployeeID, MONTH(OrderDate) ORDER BY OrderDate) AS rn
    FROM orders
) t
WHERE rn = 1
GROUP BY EmployeeID
ORDER BY cust_numb DESC

С использованием вложенных подзапросов:

SELECT TOP 1 EmployeeID, COUNT(DISTINCT customerID) AS cust_numb
FROM (
    SELECT EmployeeID, MONTH(OrderDate) AS month, COUNT(DISTINCT customerID) AS cust_count
    FROM orders
    GROUP BY EmployeeID, MONTH(OrderDate)
) t
ORDER BY cust_numb DESC

С использованием общей таблицы выражений (CTE):

WITH cte AS (
    SELECT EmployeeID, MONTH(OrderDate) AS month, COUNT(DISTINCT customerID) AS cust_count
    FROM orders
    GROUP BY EmployeeID, MONTH(OrderDate)
)
SELECT TOP 1 EmployeeID, cust_count AS cust_numb
FROM cte
ORDER BY cust_numb DESC

оптимальное решение зависит от специфики задачи и требует экспериментов и оптимизации для достижения наилучших результатов. Самое эффективное решение зависит от многих факторов, включая структуру базы данных, объем данных и характер запросов.

→ Ссылка