暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL中的GROUP BY子句

技术老小子 2024-07-04
3

如其名称所示,MySQL中的GROUP BY
子句用于将数据进行分组。它将多行数据聚合为一行。FROM
WHERE
子句生成一个中间的表结果集,而GROUP BY
子句则系统性地将数据分组。GROUP BY
子句可以按一个或多个列对结果集进行分组。意思是GROUP BY
子句将相似类型的记录或数据分组然后返回。如果在查询中使用了GROUP BY
子句,我们通常应使用聚合函数如COUNT()
SUM()
MAX()
MIN()
AVG()
等。

当我们实现GROUP BY
子句时,首先表中的数据将根据指定的列划分为不同的组,随后聚合函数将对每个组的数据执行以获取结果。这意味着首先使用GROUP BY
子句将相似类型的数据进行分组,然后在每个组上应用聚合函数以获取所需的结果。

在这篇文章中,我们将通过具体的示例和数据展示GROUP BY
的各种应用。

测试数据准备

我们将创建一个名为employees
的表,并插入一些中文数据。以下是创建和填充数据的SQL脚本:

    CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    department VARCHAR(50),
    salary DECIMAL(10, 2)
    );


    INSERT INTO employees (name, department, salary) VALUES
    ('张三', '技术部', 7500.00),
    ('李四', '销售部', 6000.00),
    ('王五', '技术部', 8000.00),
    ('赵六', '人事部', 5500.00),
    ('孙七', '销售部', 7000.00);
    复制

    执行以上SQL脚本后,我们将得到如下的测试数据:

    idnamedepartmentsalary
    1张三技术部7500.00
    2李四销售部6000.00
    3王五技术部8000.00
    4赵六人事部5500.00
    5孙七销售部7000.00

    基本的GROUP BY用法

    1. 按部门统计员工人数

    使用GROUP BY
    按部门分组,并使用COUNT
    函数统计各部门的员工人数:

      SELECT department, COUNT(*) AS employee_count
      FROM employees
      GROUP BY department;
      复制

      结果:

      2. 按部门统计总薪资

      使用GROUP BY
      按部门分组,并使用SUM
      函数计算各部门的总薪资:

        SELECT department, SUM(salary) AS total_salary
        FROM employees
        GROUP BY department;
        复制

        结果:

        3. 按部门计算平均薪资

        使用GROUP BY
        按部门分组,并使用AVG
        函数计算各部门的平均薪资:

          SELECT department, AVG(salary) AS avg_salary
          FROM employees
          GROUP BY department;
          复制

          结果:

          4. 按部门统计最高和最低薪资

          使用GROUP BY
          按部门分组,并使用MAX
          MIN
          函数计算各部门的最高和最低薪资:

            SELECT department, MAX(salary) AS max_salary, MIN(salary) AS min_salary
            FROM employees
            GROUP BY department;
            复制

            结果:

            复杂示例:按部门和薪资级别统计

            我们还可以进行多列分组,例如按部门和薪资级别统计员工人数。我们先给每个员工定义一个薪资级别,然后进行分组统计。

              SELECT 
              department,
              CASE
              WHEN salary >= 8000 THEN '高薪'
              WHEN salary >= 6000 THEN '中薪'
              ELSE '低薪'
              END AS salary_level,
              COUNT(*) AS employee_count
              FROM employees
              GROUP BY department, salary_level;
              复制

              结果:

              这个查询通过CASE
              表达式为每个员工定义了一个薪资级别,然后按部门和薪资级别分组,并统计各组的员工人数。

              结论

              GROUP BY
              子句在MySQL中是一个非常强大的工具,用于对数据进行分组和聚合分析。通过结合使用各种聚合函数,我们可以轻松统计和汇总不同组的数据。这对于数据分析、报表生成等工作非常有用。通过本文的示例,您应该对GROUP BY
              的基本用法有了较为充分的理解,并可以在实际项目中应用这些知识。


              文章转载自技术老小子,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论