【问题标题】:SQL Group BY, Top N Items for each GroupSQL Group BY,每个组的前 N ​​个项目
【发布时间】:2013-03-05 15:54:01
【问题描述】:

我有一个 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 个销售商品。

提前致谢。

【问题讨论】:

标签: sql sql-server


【解决方案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】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 2010-12-04
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多