SQL 教程 目录

SQL GROUP BY 分组统计

在本章中,我们将详细介绍 SQL 中的 GROUP BY 子句及其应用。GROUP BY 子句用于将数据表中的记录分组到一个或多个组中,这使得我们能够对每个组执行聚合函数操作。

使用场景

GROUP BY 子句通常与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,以获取分组数据的汇总信息。例如,我们可以计算每个部门的员工数量、每个产品的总销售额等。

示例:计算每个部门的员工数量

假设我们有一个名为 employees 的表,其中包含以下字段:

  • id: 员工ID
  • name: 员工姓名
  • department_id: 部门ID

我们可以使用以下 SQL 查询来计算每个部门的员工数量:

示例:计算每个产品的总销售额

假设我们有一个名为 sales 的表,其中包含以下字段:

  • product_id: 产品ID
  • amount: 销售金额

我们可以使用以下 SQL 查询来计算每个产品的总销售额:

GROUP BY 与 WHERE 子句的区别

WHERE 子句用于过滤查询结果,而 GROUP BY 子句则用于对数据进行分组和汇总。WHERE 子句应用于行级别,而 GROUP BY 子句应用于组级别。

示例:结合使用 WHERE 和 GROUP BY

假设我们需要找出销售额超过 10000 元的产品,并计算这些产品的总销售额。

在这个例子中,WHERE 子句首先过滤出销售额大于 10000 元的销售记录,然后 GROUP BY 子句对这些记录进行分组并计算每个产品的总销售额。

HAVING 子句

HAVING 子句用于过滤分组后的结果。它类似于 WHERE 子句,但用于聚合后的数据集。

示例:找出总销售额超过 50000 元的产品

在这个例子中,HAVING 子句用于筛选出总销售额超过 50000 元的产品。

GROUP BY 与 ORDER BY 的结合使用

ORDER BY 子句用于对查询结果进行排序。它可以与 GROUP BY 子句结合使用,以对分组后的数据进行排序。

示例:按总销售额降序排列的产品

在这个例子中,ORDER BY 子句用于按照总销售额从高到低对结果进行排序。

GROUP BY 与子查询的结合使用

有时候,我们需要在分组之前先执行某些计算。这时可以使用子查询来实现。

示例:计算每个部门的平均薪资,并找出平均薪资最高的部门

假设我们有一个名为 salaries 的表,其中包含以下字段:

  • employee_id: 员工ID
  • salary: 薪资
  • department_id: 部门ID

在这个例子中,我们首先通过子查询选择所有员工的薪资信息,然后对这些信息进行分组和平均值计算,最后找出平均薪资最高的部门。

GROUP BY 与多列分组

除了单列分组外,我们还可以根据多个列进行分组,从而获得更详细的汇总信息。

示例:按部门和职位分组,计算每个职位的员工数量

假设我们有一个名为 employees 的表,其中包含以下字段:

  • id: 员工ID
  • name: 员工姓名
  • department_id: 部门ID
  • position: 职位

在这个例子中,我们不仅按部门分组,还按职位进行分组,以获得每个职位在每个部门的员工数量。

GROUP BY 与复杂查询的结合使用

在实际应用中,我们经常需要结合多种 SQL 功能来完成复杂的查询任务。下面是一个综合示例,展示了如何使用 GROUP BY 与其他 SQL 功能相结合。

示例:计算每个部门的总销售额,并找出销售额最高的部门

假设我们有两个表:

  • employees 表,包含员工信息。
  • sales 表,包含销售记录。
-- -------------------- ---- -------
------ ---------------- ------------- -- -----------
---- --------- -
---- ----- - -- ---- - -------------
----- -- ---------------
------ ----------- - ------- ---------------- ---- -
    ------ ----------- -- -----------
    ---- -----
    ----- -- -----------
- ---------
----- -- ----------- -----

在这个例子中,我们首先通过连接 employeessales 表来获取每个员工的销售记录,然后对这些记录按部门进行分组和总销售额计算。接着,我们使用子查询找出平均总销售额,并利用 HAVING 子句筛选出销售额高于平均值的部门。最后,我们按总销售额降序对结果进行排序。

通过以上各种示例和说明,希望您已经掌握了 SQL 中 GROUP BY 子句的基本用法及其实际应用场景。在实际工作中,灵活运用这些知识可以帮助您高效地处理和分析大量数据。

纠错
反馈