当前位置: 代码网 > it编程>数据库>Mysql > mysql的group by函数使用方法

mysql的group by函数使用方法

2025年08月18日 Mysql 我要评论
mysql中的group by子句用于将查询结果按一个或多个列进行分组,通常与聚合函数(如count, sum, avg, max, min等)配合使用,实现数据的分组统计。以下是详细使用方法:1.

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com