it编程 > 数据库 > Mysql

mysql的group by函数使用方法

26人参与 2025-08-18 Mysql

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) 结合聚合函数

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混淆

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)

您想发表意见!!点此发布评论

推荐阅读

MySQL中TEXT和LONGTEXT区别举例详解

08-18

MySQL中的索引最左匹配原则解读

08-18

MySQL Join使用之大表关联小表及小表关联大表

08-18

Mysql之DELETE操作对应的undo日志方式

08-18

Mysql创建表以及数据库crud语句举例详细讲解

08-18

MySQL中查询和展示LONGBLOB类型数据的技巧总结

08-18

猜你喜欢

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

发表评论