目录
注意!注意!注意!
group by和聚合通常是组合一起用的,在MySQL中使用group by时,select语句所用到的字段,要么进行group by分组,要么就是对字段进行聚合,除非该字段是常量,否则select中出现其他没有被分组或者聚合的字段,就会报错,这是语法、语法、语法!!!
当使用MySQL进行数据分析时,GROUP BY
子句是一个非常重要的工具,它允许您根据一个或多个列对数据进行分组,并对每个组应用聚合函数(如COUNT
、SUM
、AVG
等)。下面是一个超级详细的MySQL GROUP BY
的使用教程:
1. 基本语法
SELECT 列1, 列2, 聚合函数(列3) FROM 表名 GROUP BY 列1, 列2;
SELECT
:选择要检索的列或表达式。聚合函数
:如COUNT
、SUM
、AVG
等。FROM
:指定要查询的表。GROUP BY
:指定要分组的列。
2. 单列分组
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
这将统计每个部门的员工数量。
3. 多列分组
SELECT department, gender, COUNT(*) AS employee_count FROM employees GROUP BY department, gender;
这将统计每个部门中不同性别的员工数量。
4. 使用表达式进行分组
SELECT YEAR(hire_date) AS hire_year, COUNT(*) AS employee_count FROM employees GROUP BY YEAR(hire_date);
这将按照员工入职年份对员工进行分组统计。
5. 使用聚合函数
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
这将计算每个部门的平均工资。
6. 过滤分组结果
SELECT department, COUNT(*) AS employee_count FROM employees WHERE salary > 50000 GROUP BY department;
这将统计工资高于50000的员工数量,按部门分组。
7. 对分组结果进行排序
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department ORDER BY employee_count DESC;
这将按照员工数量降序排列部门。
8. 使用GROUP BY的HAVING子句
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING avg_salary > 60000;
这将计算每个部门的平均工资,并且只返回平均工资大于60000的部门。
9. 嵌套查询与GROUP BY
SELECT department, MAX(salary) AS max_salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees) GROUP BY department;
这将计算每个部门中工资高于公司平均工资的员工的最高工资。
10. 注意事项
GROUP BY
子句中的列必须在SELECT
语句中出现,或者是聚合函数的参数。- 如果在
SELECT
中使用了聚合函数,则GROUP BY
中的所有列都必须是聚合函数的参数,或者出现在SELECT
中。 GROUP BY
子句按照指定的顺序对结果进行分组。