Какой правильный вопрос для этого вопроса? - PullRequest
0 голосов
/ 26 марта 2019

Как определить 3 самых важных (с наибольшим доходом) города и показать разбивку по 3 категориям высшего уровня по этим городам.

Я работаю над adventureworkslt2014.

это мой запрос, но я получил три лучшие продажи из одного и того же города:

select top 3 sum(TotalDue) as bestrevenue,city,pc.Name 
from SalesLT.ProductCategory as pc
join SalesLT.Product p 
on pc.ProductCategoryID =p.ProductCategoryID
join SalesLT.SalesOrderDetail as sod
on sod.ProductID=p.ProductID 
join SalesLT.SalesOrderHeader as soh 
on soh.SalesOrderID = soh.SalesOrderID
join SalesLT.[Address] addr
on addr.AddressID = soh.BillToAddressID
group by city,pc.Name
order by bestrevenue desc`

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

1 Ответ

1 голос
/ 26 марта 2019

Попробуйте это:

select t.*
from(select city, pc.Name, sum(TotalDue) as bestrevenue,
            row_number() OVER(partition by city,Name ORDER BY sum(TotalDue) desc) as RN 
     from SalesLT.ProductCategory as pc join 
          SalesLT.Product p 
          on pc.ProductCategoryID =p.ProductCategoryID join 
          SalesLT.SalesOrderDetail as sod
          on sod.ProductID=p.ProductID join 
          SalesLT.SalesOrderHeader as soh 
          on soh.SalesOrderID = soh.SalesOrderID join 
          SalesLT.[Address] addr
          on addr.AddressID = soh.BillToAddressID
     group by city,pc.Name
    ) t
where RN <= 3;
...