大数据学习(111)-group by与partition by
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
PARTITION BY
和 GROUP BY
是 SQL 中用于数据分组或划分的两个不同概念,尽管它们在某些场景下看起来可能相似,但它们的目的和用法有显著的区别。
1. GROUP BY
- 目的:
GROUP BY
用于将查询结果按一个或多个列进行分组,并对每组数据执行聚合操作(如SUM
、AVG
、COUNT
等)。- 它通常用于生成汇总信息。
- 特点:
GROUP BY
会对结果集进行聚合,最终返回的结果集是分组后的数据,原始行可能会被合并。- 适用于需要统计或汇总数据的场景。
- 语法示例:
解释:SELECT department, COUNT(*) AS employee_countFROM employeesGROUP BY department;
- 按
department
列分组,并统计每个部门的员工数量。 - 返回的结果集中,每个部门只有一行数据。
- 按
2. PARTITION BY
- 目的:
PARTITION BY
是窗口函数(Window Function)的一部分,用于将数据划分为逻辑上的分区(partition),然后在每个分区内执行计算。- 它不会减少结果集的行数,而是为每一行分配一个分区,并基于分区内的数据执行计算。
- 特点:
PARTITION BY
不会对数据进行聚合,而是保持原始行,并在每个分区内计算结果(如排名、累计和等)。- 常用于需要分析每个分区内的数据,但又不希望丢失原始行信息的场景。
- 语法示例:
解释:SELECT employee_id, department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank_in_department FROM employees;
- 按
department
列划分分区,并在每个分区内根据salary
降序为每个员工分配排名。 - 返回的结果集中,每个员工仍然有一行数据,只是增加了一列
rank_in_department
。
- 按
主要区别
特性 | GROUP BY | PARTITION BY |
---|---|---|
目的 | 聚合数据,生成汇总结果 | 在分区内计算,不聚合数据 |
结果集行数 | 减少行数,每个分组只返回一行 | 保持原始行数,每行增加计算结果 |
适用场景 | 统计、汇总数据 | 分析分区内的数据,保留原始行信息 |
配合函数 | 聚合函数(如 SUM 、AVG 、COUNT 等) | 窗口函数(如 RANK 、ROW_NUMBER 、SUM 等) |
总结
- 如果你需要汇总数据(如统计每个部门的员工数量),使用
GROUP BY
。 - 如果你需要在分区内计算结果(如每个部门内的员工排名),使用
PARTITION BY
。