SQL Group BY,每个组的前N项

aru*_*lam 9 sql sql-server

我有一个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
Run Code Online (Sandbox Code Playgroud)

Sales表有 - > UPCCode,SaleDate,StoreId,TotalDollarSales

我正在寻找一个查询,它会在单个查询中返回为每个商店出售的前5个商品.我可以编写多个查询并使用联合但它看起来效率不高.

如何在单个查询中获取每个商店的前5个销售商品.

提前致谢.

Aar*_*and 18

;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;
Run Code Online (Sandbox Code Playgroud)


Dum*_*dan 7

试试这个:

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
Run Code Online (Sandbox Code Playgroud)