首页 > 数据库 > mysql教程 > GROUP BY 与 PARTITION BY:SQL 中有什么区别?

GROUP BY 与 PARTITION BY:SQL 中有什么区别?

DDD
发布: 2025-01-06 06:12:39
原创
927 人浏览过

GROUP BY vs. PARTITION BY: What's the Difference in SQL?

理解 PARTITION BY 和 GROUP BY 之间的差异

GROUP BY 是一种常用的 SQL 构造,有助于根据公共值对数据行进行分组,从而能够评估聚合这些分组行上的函数。然而,数据库操作中 PARTITION BY 的出现,引发了人们对这两种操作之间区别的疑问。

GROUP BY 概述

GROUP BY 将共享相同数据记录的数据分组指定列中的值,将它们折叠成不同的组。然后为每个组计算后续聚合函数(例如 SUM()、COUNT())。 GROUP BY 的主要目的是汇总和压缩大型数据集。

使用 PARTITION BY 进行分区

与 GROUP BY 不同,PARTITION BY 在窗口函数的上下文中运行。这些函数评估由特定条件定义的范围(或“窗口”)内的数据行。 PARTITION BY 根据指定的列值将窗口数据划分为多个分区。然后将窗口函数单独应用于每个分区,以便进行更精细和细致的计算。

主要区别

  1. 范围: GROUP BY 影响整个查询结果,对符合指定条件的所有行进行分组和聚合。另一方面,PARTITION BY 仅限于窗口函数,仅在定义的窗口范围内对数据进行分区。
  2. 对行计数的影响: GROUP 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板