Найти топ 3 самых упорядоченных категорий из X страны;и город с большинством заказов из 2-й категории из этой страны - PullRequest
0 голосов
/ 20 октября 2019

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

Во-первых, я нашел три категории. А для второй части (для города) мне пришлось изменить первый запрос, получив от него вторую категорию, чтобы настроить его для второй (если я в этом есть смысл). Я не считаю это хорошим подходом;Я хочу один запрос для обеих частей, если это возможно. Я также попытался с помощью функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...