SQL Group BY, Top N Items for each Group

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

I have a SQL Query which gets gets top 5 sold items at a given store.

SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) FROM Sales S WHERE S.StoreId = 1 GROUP BY S.UPCCode ORDER BY SUM(S.TotalDollarSales) desc 

The Sales table has -> UPCCode, SaleDate, StoreId, TotalDollarSales

I am looking for a query which will return me Top 5 items sold for each of the stores in a single query. I can write multiple queries and use a union but it doesn't seem efficient.

How can I get the top 5 sold items for each store in a single query.

Thanks in advance.

回答1:

;WITH s AS  (   SELECT StoreID, UPCCode, tds, rn = ROW_NUMBER()   OVER (PARTITION BY StoreID ORDER BY tds DESC)   FROM    (     SELECT StoreID, UPCCode, tds = SUM(TotalDollarSales)     FROM Sales     GROUP BY StoreID, UPCCode   ) AS s2 ) SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn 5 ORDER BY StoreID, TotalDollarSales DESC; 


回答2:

try this:

select ss.StoreId,is.* from (select distinct StoreId from Sales) ss cross apply (SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) as SumTotalDollarSales FROM Sales S              WHERE S.StoreId = ss.StoreId              GROUP BY S.UPCCode              ORDER BY SUM(S.TotalDollarSales) desc) is 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!