SQL Group BY:为每个组获取前 N 个项目
在 SQL 中处理数据时,通常需要根据以下条件对记录进行分组共同标准并在每个组内执行计算或聚合。这就是 GROUP BY 子句发挥作用的地方。本文讨论了一种强大的技术,它将 GROUP BY 与 ROW_NUMBER() 函数相结合,以在单个查询中高效地检索每个组的前 N 个商品。
问题:每个商店最畅销的商品
考虑一个场景,其中我们有一个 Sales 表,其中包含 UPCCode、SaleDate、StoreId 和列总销售额。任务是确定每个商店中销量最高的 5 件商品。
查询:
我们可以使用 UNION 通过多个单独的查询来解决这个问题,但这可能不会要有效率。相反,以下查询利用子查询和 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 ) SELECT StoreID, UPCCode, TotalDollarSales = tds FROM s WHERE rn <= 5 ORDER BY StoreID, TotalDollarSales DESC;
解释:
结论:
这个高级 SQL 查询允许您有效地收集每个组的前 N 个项目,优雅地处理常见的数据处理场景并增强您的查询优化技能。
以上是如何使用SQL的GROUP BY高效检索每个组的前N项?的详细内容。更多信息请关注PHP中文网其他相关文章!