GROUP BY 是一种常用的 SQL 构造,有助于根据公共值对数据行进行分组,从而能够评估聚合这些分组行上的函数。然而,数据库操作中 PARTITION BY 的出现,引发了人们对这两种操作之间区别的疑问。
GROUP BY 概述
GROUP BY 将共享相同数据记录的数据分组指定列中的值,将它们折叠成不同的组。然后为每个组计算后续聚合函数(例如 SUM()、COUNT())。 GROUP BY 的主要目的是汇总和压缩大型数据集。
使用 PARTITION BY 进行分区
与 GROUP BY 不同,PARTITION BY 在窗口函数的上下文中运行。这些函数评估由特定条件定义的范围(或“窗口”)内的数据行。 PARTITION BY 根据指定的列值将窗口数据划分为多个分区。然后将窗口函数单独应用于每个分区,以便进行更精细和细致的计算。
主要区别
示例
考虑一个订单表:
CustomerID | OrderID |
---|---|
1 | 10 |
1 | 15 |
2 | 20 |
2 | 25 |
使用组BY:
SELECT CustomerID, COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID
输出:
CustomerID | OrderCount |
---|---|
1 | 2 |
2 | 2 |
使用 PARTITION BY:
SELECT ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderID) AS OrderNumberForRow FROM Orders
输出:
CustomerID | OrderID | OrderNumberForRow |
---|---|---|
1 | 10 | 1 |
1 | 15 | 2 |
2 | 20 | 1 |
2 | 25 | 2 |
在此示例中,PARTITION BY 按 CustomerID 分隔数据,并在每个分区内连续分配行号。
总而言之,PARTITION BY 在窗口函数计算方面提供了额外的灵活性,可以对数据进行分区以进行更有针对性的评估。相比之下,GROUP BY 提供全局聚合和行缩减以实现简洁的数据摘要。理解这些操作之间的区别对于优化 SQL 代码和最大化查询效率至关重要。
以上是GROUP BY 与 PARTITION BY:SQL 中有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!