⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 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;

计算每个城市每条街道的平均收入

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

GROUP BY ALL 示例

按 city 和 street_name 分组以删除任何重复值

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:

语法