MySQL分组查询深度解析

需积分: 6 0 下载量 162 浏览量 更新于2024-08-07 收藏 969B MD 举报
"MySQL分组查询是数据库操作中的一个重要概念,常用于对数据进行汇总和分析。在MySQL中,`GROUP BY`语句用于将数据表中的数据,根据一个或多个列进行分组,以便对每个分组应用聚合函数,如`COUNT`、`SUM`、`AVG`、`MAX`和`MIN`。以下是对分组查询的详细解释和示例。 ### 分组查询语法 在SQL中,分组查询的基本语法如下: ```sql SELECT [ALL|DISTINCT] 表达式列表 FROM 表名 [WHERE 查询条件] [GROUP BY 分组列表] [HAVING 组筛选条件] [ORDER BY 表达式列表 {ASC|DESC}] [LIMIT [起始行],[返回的行数]] ``` ### 1. 分组查询示例 #### 获得每个学生所修课程的成绩最高分 在这个例子中,我们想要找出每个学生在每门课程中的最高分数。首先,我们需要按照学生ID(`stu_no`)进行分组,然后使用`MAX`函数找出每个分组(即每个学生)的最高分数。 ```sql SELECT stu_no, course_no, MAX(course_value) FROM student_score GROUP BY stu_no ``` 这个查询将返回每个学生的ID,他们所修的课程ID,以及在这些课程中的最高分数。 ### 2. 获得所修课程大于两门课的学生的成绩最高分 在这个更复杂的例子中,我们不仅需要找出每个学生的最高分数,还要确保他们至少选修了三门课程。因此,我们需要在`GROUP BY`后添加一个`HAVING`子句来过滤结果。 ```sql SELECT stu_no, course_no, MAX(course_value) FROM student_score GROUP BY stu_no HAVING COUNT(course_no) > 2 ``` 这里,`HAVING`子句用于在`GROUP BY`之后筛选结果,只保留那些课程数量大于2的学生记录。这样,我们就能得到所有选修超过两门课程的学生及其各门课程的最高分数。 ### 分组查询的注意事项 - `GROUP BY`语句必须出现在`WHERE`子句之后,`HAVING`子句之前。 - 在`GROUP BY`后的`SELECT`列表中,除了聚合函数外,只能包含分组列或者`GROUP BY`语句中的表达式。 - `HAVING`子句用来筛选分组后的结果,而`WHERE`子句则是在分组前进行筛选。 了解并熟练运用`GROUP BY`和`HAVING`子句,能够帮助你在处理大量数据时进行有效的分析和报告。在实际应用中,这些工具对于数据挖掘、统计报表和业务决策至关重要。"