⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
GROUP BY 子句

GROUP BY 子句用于指定在 SELECT 子句中执行聚合操作时所使用的分组列。如果指定了 GROUP BY 子句,则该查询始终被视为聚合查询,即使 SELECT 子句中不存在任何聚合函数也是如此。

当指定 GROUP BY 子句时,所有在分组列中具有匹配数据(即属于同一组)的元组都将被合并。分组列本身的值保持不变,而其他列可以使用聚合函数(例如 countsumavg 等)进行合并。

GROUP BY ALL

使用 GROUP BY ALL 可以对 SELECT 语句中所有未被聚合函数包裹的列进行 GROUP BY 分组。这简化了语法,使得列列表只需在一处维护,并通过保持 SELECT 的粒度与 GROUP BY 的粒度一致来防止错误(例如,防止重复)。请参阅下方的示例以及“使用 DuckDB 实现更友好的 SQL”博客文章中的更多示例。

多维分组

通常情况下,GROUP BY 子句沿单个维度进行分组。使用 GROUPING SETSCUBEROLLUP 子句可以沿多个维度进行分组。有关更多信息,请参阅 GROUPING SETS 页面。

示例

统计 addresses 表中属于每个不同城市的条目数

SELECT city, count(*)
FROM addresses
GROUP BY city;

计算每个城市中每条街道名称(street_name)的平均收入

SELECT city, street_name, avg(income)
FROM addresses
GROUP BY city, street_name;

GROUP BY ALL 示例

按城市和街道名称分组以移除任何重复值

SELECT city, street_name
FROM addresses
GROUP BY ALL;

计算每个城市中每条街道名称的平均收入。由于收入(income)已被聚合函数包裹,因此无需将其包含在 GROUP BY

SELECT city, street_name, avg(income)
FROM addresses
GROUP BY ALL;
-- GROUP BY city, street_name:

语法

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南