目录
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. 基础语法
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. 注意事项
MySQL 5.7+默认启用ONLY_FULL_GROUP_BY模式,要求SELECT中的非聚合列必须出现在GROUP BY中。
可通过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中的group by用法指南MySQL的GROUP BY与COUNT()函数的使用方法及常见问题mysql中的group by和between用法详解mysql中的group by高级用法MySQL GROUP BY分组取字段最大值的方法示例MySQL中distinct和group by去重的区别解析MySQL中ONLY_FULL_GROUP_BY的使用小结MySQL 5.7升级8.0报异常:ONLY_FULL_GROUP_BY的问题解决解决mysql @@sql_mode问题---only_full_group_by mysql group by 多个行转换为一个字段
