⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
GROUP BY Clause

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 SETS, CUBEROLLUP 子句 可以沿多个维度进行分组。 更多信息请参见 GROUPING SETS 页面。

Examples

计算属于每个不同城市的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 示例

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

SELECT city, street_name
FROM addresses
GROUP BY ALL;

计算每个城市每条街道的平均收入。由于收入被包裹在聚合函数中,不要将其包含在GROUP BY中:

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

Syntax