数据库常见面试题 —— 11. Partition by 和 group by 的区别

GROUP BY 子句通常用于聚合函数(例如 SUM,COUNT,AVG 等)的计算,以便将多行数据组合成单个行,并根据聚合结果对数据进行分组。它可以将结果分为不同的组,其中每个组包含具有相同值的一组行,并且可以根据一项或多项列来指定分组。例如:

SELECT country, city, COUNT(*) as count
FROM customers
GROUP BY country, city

以上 SQL 查询将在 customers 表中将客户按照所在国家和城市进行分组,并计算每个组中客户的数量。

PARTITION BY 子句用于对结果数据集进行分区(分组),然后使用聚合函数(例如 SUM,COUNT,AVG 等)来计算每个分区内的值。与 GROUP BY 不同的是,PARTITION BY 不是仅用于聚合结果的分组策略,而是仅分区未聚合的结果集。这个关键字通常与窗口函数一起使用,对每个分区执行排名、排序和聚合等操作。例如:

SELECT *,
       SUM(quantity) OVER (PARTITION BY order_date) as total_quantity
FROM orders

以上 SQL 查询将在 orders 表中,将订单按照订单日期进行分区,并计算结果中每个分区的 quantity 列的总和,并将结果添加到每一行。

因此,PARTITION BY 和 GROUP BY 都将数据集分成多个分组,然而,它们的主要区别是 GROUP BY 定义了聚合条件,而 PARTITION BY 是仅用于分组结果集并对每个分区执行排名、排序和聚合等分析函数。

你可能感兴趣的:(数据库SQL常见面试题,数据库)