PostgreSQL Group By

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解 PostgreSQL 中 GROUP BY 子句的工作原理。我们还将看到 GROUP BY 子句与 SUM() 函数、COUNT()、JOIN 子句、多个列以及没有聚合函数 一起使用的示例。

PostgreSQL GROUP BY 条件与 SELECT 命令一起使用,它也可以用于减少结果中的冗余。

PostgreSQL GROUP BY 子句

最重要的是,此子句用于将行分成组,其中 GROUP BY 条件在多个记录中收集数据并按一个或多个列设置结果。

并且每个组都可以应用聚合函数,例如 COUNT() 函数 用于获取组中的项目数,而 SUM() 函数 用于分析项目的总和。

PostgreSQL group by 子句的语法

GROUP BY 子句的基本语法如下所示

以下是上述语法中使用的参数

列列表: 用于选择需要分组的列,它可以是 column1, column2,...columnN

我们还可以将 SELECT 命令的附加条件与 GROUP BY 子句一起使用。

PostgreSQL 中,GROUP BY 子句的工作原理如下

PostgreSQL Group By

PostgreSQL GROUP BY 子句的示例

为了更好地理解,我们将使用在 PostgreSQL 教程的前面部分中创建的 Employee 表。

PostgreSQL Group By
  • 不使用聚合函数的 GROUP BY 子句示例

在这里,我们将使用 GROUP BY 子句,而不应用聚合函数。因此,我们使用以下命令,该命令从 employee 表中获取记录,并通过 emp_id 对结果进行分组。

输出

在执行上述命令后,我们将获得以下结果

PostgreSQL Group By

在上面的例子中,GROUP BY 子句的工作方式类似于 DISTINCT 条件,这有助于我们从结果集中删除匹配的行。

  • 使用 PostgreSQL GROUP BY 子句的 SUM() 函数示例

在这里,我们将聚合函数与 GROUP BY 条件一起使用。

例如,如果我们想获取 salary 的总和,其中 first_nameJohnemployee 表中。因此,我们使用 where 子句与 GROUP BY 子句来获取 John 的薪水。

以下命令用于借助 GROUP BY 条件获取 John 的薪水的总和

输出

在执行上述命令后,我们将获得以下结果

PostgreSQL Group By

注意:在 employee 表中,我们有 first_name 重复为 john。在使用此命令后,两个 john 的薪水被合并,因为我们使用了 where 子句,并显示了 john 薪水的总和。

在下面的命令中,我们使用 ORDER BY 条件以 升序 显示所有员工的薪水,并使用 GROUP BY 子句

输出

在执行上述命令后,我们将获得以下输出

PostgreSQL Group By
  • 使用 PostgreSQL GROUP BY 子句的 JOIN 条件示例

在下面的示例中,我们使用 GROUP BY 子句与 INNER JOIN 子句来获取每个员工薪水的总和。

在以下命令中,我们将 employee 表与 employee_details 表联接,并按员工姓名 连接(合并) 员工。

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Group By
  • 使用 PostgreSQL GROUP BY 子句的 Count() 函数示例

在下面的示例中,我们使用 COUNT() 函数来获取 emp_id 的数量。因此,我们选择 first_name,并从 employee 表中获取 emp_id 的计数。

输出

在执行上述命令后,我们将获得以下结果,在 first_name 列中,我们可以看到我们得到 John 的计数为 2

PostgreSQL Group By

对于每个组,它使用 COUNT() 函数 返回行数。并且 GROUP BY 子句将 employee 中的行分成组,并按 emp_id 列中的值对它们进行分组。

  • 使用 PostgreSQL GROUP BY 子句的多个列示例

在这里,我们将使用一个或多个列,并在 GROUP BY 子句的帮助下获取记录。

在下面的示例中,我们使用的多个列是 emp_id 和 first_name,使用 GROUP BY 子句,它通过它们的值分隔 employee 表中的行,并用于每个 emp_id 和 first_name 组。

并且 SUM() 函数用于评估每个员工的总薪水。

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Group By