[英]SQL Group BY, Top N Items for each Group
我有一个SQL查询,它可以获得给定商店的前5个销售商品。
SELECT TOP 5 S.UPCCode, SUM(TotalDollarSales) FROM Sales S
WHERE S.StoreId = 1
GROUP BY S.UPCCode
ORDER BY SUM(S.TotalDollarSales) desc
Sales表有 - > UPCCode,SaleDate,StoreId,TotalDollarSales
我正在寻找一个查询,它将在单个查询中返回为每个商店出售的前5个项目。 我可以编写多个查询并使用联合但它看起来效率不高。
如何在单个查询中获取每个商店的前5个销售商品。
提前致谢。
;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;
试试这个:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.