开发者

mysql的group by函数使用方法

目录
  • 1. 基础语法
  • 2. 核心功能
    • (1) 单列分组
    • (2) 多列分组
    • (3) 结合聚合函数
  • 3. 过滤分组:HAVING
    • 4. 常见错误
      • (1) SELECT非聚合列未分组
      • (2) HAVING与WHERE混淆
    • 5. 高级用法
      • (1) WITH ROLLUP(生成小计/总计)
      • (2) 分组后排序
    • 6. 注意事项
      • 示例场景

        mysql中的GROUP BY子句用于将查询结果按一个或多个列进行分组,通常与聚合函数(如COUNT, SUM, AVG, MAX, MIN等)配合使用,实现数据的分组统计。以下是详细使用方法:

        1. 基础语法

        SELEphpCT column1, aggregate_function(column2)
        FROM table_name
        WHERE condition
        GROUP BY column1
        ORDER BY column1;

        2. 核心功能

        (1) 单列分组

        统计每个部门的员工数量:

        SELECT departmphpent, COUNT(*) AS employeephp_count
        FROM employees
        GROUP BY department;

        (2) 多列分组

        统计每个部门+职位的平均工资:

        SELECT department, job_title, AVG(salary) AS avg编程客栈_salary
        FROM employees
        GROUP BY department, job_title;

        (3) 结合聚合函数

        • COUNT():计数
        • SUM():求和
        • AVG():平均值
        • MAX()/MIN():极值
        • GROUP_CONCAT():合并分组内的字符串

        3. 过滤分组:HAVING

        WHERE过滤行,HAVING过滤分组:

        SELECT department, AVG(salary) AS avg_salary
        FROM employees
        GROUP BY department
        HAVING avg_salary > 5000;  -- 筛选平均工资>5000的部门

        4. 常见错误

        (1) SELECT非聚合列未分组

        ❌ 错误写法:

        SELECT department, employee_name, COUNT(*)
        FROM employees
        GROUP BY department;

        ✅ 正确写法:

        SELECT department, GROUP_CONCAT(employee_name), COUNT(*)
        FROM employees
        GROUP BY departmandroident;

        (2) HAVING与WHERE混淆

        • WHERE在分组前过滤(如过滤原始数据)
        • HAVING在分组后过滤(如过滤统计结果)

        5. 高级用法

        (1) WITH ROLLUP(生成小计/总计)

        SELECT department, SUM(salary)
        FROM employees
        GROUP BY department WITH ROLLUP;

        结果会多出一行NULL,表示所有部门的总计。

        (2) 分组后排序

        SELECT department, COUNT(*)
        FROM employees
        GROUP BY department
        ORDER BY COUNT(*) DESC;  -- 按员工数量降序排列

        6. 注意事项

        1. MySQL 5.7+默认启用ONLY_FULL_GROUP_BY模式,要求SELECT中的非聚合列必须出现在GROUP BY中。
        2. 可通过ANY_VALUE()函数绕过严格模式:
          SELECT ANY_VALUE(employee_name), department, COUNT(*)
          FROM employees
          GROUP BY department;

        示例场景

        统计2023年每月销售额及订单数:

        SELECT 
            MONTH(order_date) AS month,
            SUM(amount) AS total_sales,
            COUNT(order_id) AS order_count
        FROM orders
        WHERE YEAR(order_date) = 2023
        GROUP BY MONTH(order_date)
        ORDER BY month;

        通过灵活组合GROUP BY和聚合函数,可以高效实现复杂的数据统计分析需求。

        到此这篇关于mysql的group by函数怎么使用的文章就介绍到这了,更多相关mysql group by函数内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜