悠悠楠杉
网站页面
正文:
在数据分析或报表生成场景中,分组统计是MySQL最常用的操作之一。无论是电商平台的订单分类汇总,还是用户行为的分时段统计,GROUP BY都能将杂乱的数据转化为清晰的结构化结果。本文将系统介绍如何正确输入和执行分组语句,并分享实际开发中的避坑指南。
在MySQL中,分组语句通常写在SELECT查询的末尾,紧跟在WHERE条件之后。其标准结构如下:sql
SELECT 列1, 列2, 聚合函数(列3)
FROM 表名
WHERE 条件
GROUP BY 列1, 列2
HAVING 聚合函数条件;
例如统计不同部门的平均薪资:
SELECT department, AVG(salary) as avg_salary
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department
HAVING AVG(salary) > 8000;
-- 错误:salary未出现在GROUP BY或聚合函数中
SELECT department, salary
FROM employees
GROUP BY department;
- WHERE在分组前过滤原始数据
- HAVING在分组后过滤结果集
典型应用场景:
-- 先过滤30岁以上员工,再计算各部门人数
SELECT department, COUNT(*)
FROM employees
WHERE age > 30
GROUP BY department
HAVING COUNT(*) > 5;
ALTER TABLE employees ADD INDEX idx_department (department);
SELECT department, COUNT(*)
FROM employees
GROUP BY department
ORDER BY NULL;
-- 先按日期过滤再分组
SELECT product_id, SUM(quantity)
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31'
GROUP BY product_id;
SELECT YEAR(order_date), MONTH(order_date), COUNT(*)
FROM orders
GROUP BY YEAR(order_date), MONTH(order_date);
SELECT department, job_title, SUM(salary)
FROM employees
GROUP BY department, job_title WITH ROLLUP;