mysql的group by函数使用方法

 更新时间:2025年08月18日 10:07:28   作者:detayun  
MySQL中的GROUP BY子句用于将查询结果按一个或多个列进行分组,通常与聚合函数,实现数据的分组统计,本文给大家介绍mysql的group by函数使用方法,感兴趣的朋友跟随小编一起看看吧

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

1. 基础语法

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

2. 核心功能

(1) 单列分组

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

SELECT department, COUNT(*) AS employee_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 department;

(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函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL数据库执行Update卡死问题的解决方法

    MySQL数据库执行Update卡死问题的解决方法

    最近开发的时候debug到一条update的sql语句时程序就不动了,然后我就在plsql上试了一下,发现plsql一直在显示正在执行,等了好久也不出结果,下面这篇文章主要给大家介绍了关于MySQL数据库执行Update卡死问题的解决方法,需要的朋友可以参考下
    2022-05-05
  • Mysql处理Duplicate entry ‘6‘ for key ‘PRIMARY‘问题及解决

    Mysql处理Duplicate entry ‘6‘ for key 

    这篇文章主要介绍了Mysql处理Duplicate entry ‘6‘ for key ‘PRIMARY‘问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • mysql8查看锁信息

    mysql8查看锁信息

    MYSQL中有一个重要的特性就是锁,下面这篇文章主要给大家介绍了关于mysql8查看锁信息的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • MySQL提示“too many connections“错误的解决过程

    MySQL提示“too many connections“错误的解决过程

    当大量的connect之后,就会出现Too many connections的错误,下面这篇文章主要给大家介绍了关于MySQL提示“too many connections“错误的解决过程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 详解 Mysql 事务和Mysql 日志

    详解 Mysql 事务和Mysql 日志

    这篇文章主要介绍了详解 Mysql 事务和Mysql 日志的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL中使用replace、regexp进行正则表达式替换的用法分析

    MySQL中使用replace、regexp进行正则表达式替换的用法分析

    这篇文章主要介绍了MySQL中使用replace、regexp进行正则表达式替换的用法,结合具体实例形式分析了replace、regexp正则替换的使用技巧与相关注意事项,需要的朋友可以参考下
    2017-03-03
  • MySQL之union和union all的使用及区别说明

    MySQL之union和union all的使用及区别说明

    这篇文章主要介绍了MySQL之union和union all的使用及区别说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Mysql 增加主键或者修改主键的sql语句操作

    Mysql 增加主键或者修改主键的sql语句操作

    这篇文章主要介绍了Mysql 增加主键或者修改主键的sql语句操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 一键搭建MYSQL主从,轻松应对数据备份与恢复

    一键搭建MYSQL主从,轻松应对数据备份与恢复

    MYSQL主从是一种常见的数据库架构,它可以提高数据库的可用性和性能,在主从架构中,主数据库负责处理写操作,而从数据库负责处理读操作,当主数据库发生故障时,从数据库可以接管并继续提供服务,从而实现高可用性,需要的朋友可以参考下
    2023-10-10
  • linux下mysql开启远程访问权限 防火墙开放3306端口

    linux下mysql开启远程访问权限 防火墙开放3306端口

    这篇文章主要为大家详细介绍了linux下mysql开启远程访问权限,防火墙开放3306端口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01

最新评论