SQL: PARTITION BY 和 GROUP BY 的区别

SQL: PARTITION BY 和 GROUP BY 的区别

在本文中,我们将介绍 SQL 中 PARTITION BY 和 GROUP BY 的区别,并通过示例说明它们的用法和作用。

阅读更多:SQL 教程

PARTITION BY

PARTITION BY 是 SQL 中用于将数据分组的关键字。它可以在分组函数中使用,以便根据指定的列或表达式对数据进行分组,并对每个分组应用相应的聚合函数。PARTITION BY 可以用于窗口函数来计算每个分组的聚合值,例如求和、平均值、最大值等。

以下是 PARTITION BY 的基本语法:

SELECT column1, column2, aggregate_function(column3) OVER (PARTITION BY column4)
FROM table_name;
SQL

让我们通过一个示例来说明 PARTITION BY 的使用。假设我们有一个名为 “students” 的表,其中包含学生的姓名、年龄和城市。我们希望计算每个城市的学生总人数。

SELECT city, COUNT(*) OVER (PARTITION BY city) AS total_students
FROM students;
SQL

在上面的示例中,我们通过 PARTITION BY city 将数据按城市进行分组,并使用 COUNT(*) 聚合函数计算每个城市的学生总数。结果将返回每个城市及其对应的学生总人数。

GROUP BY

GROUP BY 也是 SQL 中用于将数据分组的关键字。它可以在 SELECT 语句中使用,以便按指定的列或表达式对数据进行分组,并对每个分组应用相应的聚合函数。GROUP BY 可以用于计算每个分组的聚合值,例如求和、平均值、最大值等。

以下是 GROUP BY 的基本语法:

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;
SQL

让我们通过一个示例来说明 GROUP BY 的使用。假设我们有一个名为 “orders” 的表,其中包含订单编号、客户编号和订单金额。我们希望计算每个客户的订单总金额。

SELECT customer_id, SUM(order_amount) AS total_amount
FROM orders
GROUP BY customer_id;
SQL

在上面的示例中,我们通过 GROUP BY customer_id 将数据按客户进行分组,并使用 SUM(order_amount) 聚合函数计算每个客户的订单总金额。结果将返回每个客户及其对应的订单总金额。

PARTITION BY vs GROUP BY

PARTITION BY 和 GROUP BY 在功能上非常相似,它们都用于将数据进行分组并应用聚合函数。然而,它们之间存在一些重要的区别:

  1. PARTITION BY 是在窗口函数中使用的,而 GROUP BY 是在 SELECT 语句中使用的。
  2. PARTITION BY 可以计算每个分组的聚合值,同时保留每个行的详细信息,而 GROUP BY 只能计算每个分组的聚合值,并且不显示分组内的详细信息。
  3. PARTITION BY 具有范围更广的应用场景,可以用于复杂的查询需求,例如计算排名、移动平均值等。而 GROUP BY 更适合进行简单的分组聚合操作。

在实际应用中,我们需要根据具体的查询需求来选择使用 PARTITION BY 还是 GROUP BY。

总结

PARTITION BY 和 GROUP BY 是 SQL 中用于将数据分组并应用聚合函数的关键字。PARTITION BY 在窗口函数中使用,可以计算每个分组的聚合值,并保留每行的详细信息,适合复杂的查询需求;而 GROUP BY 在 SELECT 语句中使用,只能计算每个分组的聚合值,并不显示详细信息,适合简单的分组聚合操作。根据具体的查询需求,选择合适的关键字来实现所需的分组计算。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册