Итак, как следует из названия, мне нужно найти три категории с наибольшим количеством заказов во Франции, а также город для второй категории, в которой больше всего заказов. Я смог достичь этого, но я думаю, что может быть лучший подход к решению этой проблемы.
Во-первых, я нашел три категории. А для второй части (для города) мне пришлось изменить первый запрос, получив от него вторую категорию, чтобы настроить его для второй (если я в этом есть смысл). Я не считаю это хорошим подходом;Я хочу один запрос для обеих частей, если это возможно. Я также попытался с помощью функции cte и нумерации строк, чтобы получить их позже, но тоже не удалось. Я не совсем в курсе всех функций, доступных в mssql, новичок здесь. С точки зрения программирования, я считаю это достижимым, не уверен, что это можно сделать и здесь. Любые мысли по этому вопросу будут высоко оценены.
--1. find top 3 categories with most orders in France
create view top3infrance as
select top 3 c.CategoryName, o.ShipCountry, count(o.OrderID) as total
from Categories as c
left join Products as p on c.CategoryID = p.CategoryID
left join [Order Details] as od on p.ProductID = od.ProductID
left join Orders as o on od.OrderID = o.OrderID
where o.ShipCountry in ('france')
group by c.CategoryName, o.ShipCountry
order by total desc
--2. city with most orders from second category from the above query
create view top1infrance as
select top 1 sub.ShipCountry, sub.ShipCity,sub.CategoryName, sub.total
from
(select top 3 c.CategoryName, o.ShipCountry, o.ShipCity, count(o.OrderID) as total
from Categories as c
left join Products as p on c.CategoryID = p.CategoryID
left join [Order Details] as od on p.ProductID = od.ProductID
left join Orders as o on od.OrderID = o.OrderID
where o.ShipCountry in ('france') and c.CategoryName in('seafood')
group by c.CategoryName, o.ShipCountry, o.ShipCity) as sub
order by total desc
select * from top3infrance
select * from top1infrance