使用 SQL Group By 的每个组的前 N 个项目
在数据库中,GROUP BY 子句用于对表中的行进行分组基于一列或多列中的共同值。当与 SUM() 等聚合函数结合使用时,它可用于计算每个组的统计数据。然而,在某些情况下,可能需要提取每组中前 N 个商品。
解决此问题的一种方法是使用子查询来计算每个商店中每个商品的总销售额,然后排名他们在每个商店内。这可以通过使用 ROW_NUMBER() 函数为每行生成排名来实现,按存储分区:
;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 )
子查询创建一个包含三列的新表 s:StoreID、UPCCode 和 tds(总共美元销售额)。它还包括一个排名列 rn,它为每一行提供其存储中的排名。排名是使用 ROW_NUMBER() 函数生成的,并按 StoreID 列进行分区。
要提取每个商店销量最高的 5 件商品,可以使用以下查询:
SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
此查询从 s 表中选择 rn 值小于或等于 5 的所有行。结果按每个商店内的 TotalDollarSales 降序排序。因此,输出将包含 Sales 表中每个商店销量排名前 5 的商品。该方法结合了 GROUP BY、聚合函数和排名的使用,可以在单个查询中高效地检索所请求的数据。
以上是如何使用 SQL 的 GROUP BY 子句获取每个组的前 N 个项目?的详细内容。更多信息请关注PHP中文网其他相关文章!