
我发誓:每一道题目都不超过如下知识点。
如果超过了,就让凤姐和乔碧萝蹂躏我一百次。
SQL跟初中数学一样,记忆概念、用法是没卵用的。
能灵活应用才是王道。
====================================================================================================
任务:找出每个班级的学生人数,并按班级人数降序排列。
====================================================================================================
GROUP BY 知识点
1. 基本用法
GROUP BY column
: 将结果集按照一个或多个列进行分组。- 示例:
SELECT class_code, COUNT(student_id) FROM students GROUP BY class_code;
查找每个班级的学生人数。
- 示例:
2. 多列分组
GROUP BY column1, column2, ...
: 按多个列进行分组。- 示例:
SELECT grade_code, class_code, COUNT(student_id) FROM students GROUP BY grade_code, class_code;
查找每个年级和班级的学生人数。
- 示例:
3. 聚合函数
- 常用聚合函数:
COUNT(column)
: 计算某列的行数。SUM(column)
: 计算某列的总和。AVG(column)
: 计算某列的平均值。MIN(column)
: 找出某列的最小值。MAX(column)
: 找出某列的最大值。- 示例:
SELECT class_code, AVG(score) FROM scores GROUP BY class_code;
查找每个班级的平均分数。
4. HAVING 子句
HAVING condition
: 在分组后的结果中应用条件过滤。- 示例:
SELECT class_code, COUNT(student_id) FROM students GROUP BY class_code HAVING COUNT(student_id) > 10;
查找学生人数超过10人的班级。
- 示例:
5. 结合 ORDER BY
ORDER BY column
: 对分组后的结果进行排序。- 示例:
SELECT class_code, COUNT(student_id) FROM students GROUP BY class_code ORDER BY COUNT(student_id) DESC;
查找每个班级的学生人数,并按学生人数降序排列。
- 示例:
6. 注意事项
- 选择列的限制:
- 在
SELECT
子句中,除了聚合函数外,只能选择出现在GROUP BY
子句中的列。 - 示例:
SELECT class_code, COUNT(student_id) FROM students GROUP BY class_code;
是有效的。 - 示例:
SELECT name, class_code, COUNT(student_id) FROM students GROUP BY class_code;
是无效的,因为name
列不在GROUP BY
子句中。
- 在
students,学生表
student_id | name | class_code | grade_code | birth_date | residence | gender |
---|---|---|---|---|---|---|
100611 | 姜建华 | C219 | S3 | 2009-01-15 | 城镇 | m |
102890 | 韩辉 | C223 | S3 | 2009-10-26 | 农村 | m |
105684 | 李丽丽 | C219 | S3 | 2009-03-28 | 城镇 | m |
110591 | 李华 | C223 | S1 | 2008-05-31 | 农村 | m |
110611 | 王桂珍 | C218 | S3 | 2008-06-04 | 城镇 | m |
scores,成绩表
分数可能为Null
student_id | subject | score | exam_date |
---|---|---|---|
358575 | 生物 | 29 | 2024-06-30 |
735011 | 语文 | 37 | 2024-03-30 |
597305 | 历史 | 67 | 2024-03-30 |
921856 | 数学 | 76 | 2024-04-27 |
455713 | 化学 | 77 | 2024-06-30 |
teachers
,教师表
如第一行,赵娇娇教学C218、C219、C217三个班级的语文,是C217班的班主任
teacher_id | name | subject | class_code | head_teacher | degree | graduate_date(毕业日期) | enter_date(入校日期) | gender | qualification(职称) | fir_degr(第一学历) | mst_degr(研究生学历) |
---|---|---|---|---|---|---|---|---|---|---|---|
t001 | 赵娇娇 | 语文 | C218C219C217 | C217 | master | 2010-06-30 | 2010-07-30 | f | Senior | 北京大学 | 北京大学 |
t002 | 任伊乐 | 语文 | C220C221C222C223C224 | C220 | master | 2010-06-30 | 2010-07-30 | f | Senior | 北京大学 | 清华大学 |
t003 | 李敏 | 数学 | C218C219C217 | C218 | master | 1994-06-30 | 1994-07-30 | f | Senior | 北京大学 | 复旦大学 |
t004 | 吕敏 | 数学 | C220C221C222 | C221 | phd | 1995-06-30 | 1995-07-30 | f | Senior | 北京大学 | 清华大学 |
t005 | 陈佳蔬 | 数学 | C223C224 | C223 | master | 2010-06-30 | 2010-07-30 | f | null | 北京大学 | 北京大学 |
university,大学信息表
name | is_985 | times_rnk(泰晤士2024全球排名) |
---|---|---|
King's College London | 0 | 34 |
National University of Singapore,NUS | 0 | 24 |
Singapore Polytechnic | 0 | null |
上海交通大学 | 1 | 113 |
北京大学 | 1 | 16 |
class_code | student_count |
---|---|
C222 | 54 |
C219 | 51 |
C220 | 47 |
C217 | 46 |
C223 | 44 |
C221 | 43 |
C218 | 35 |
 点击下方空白区域即可查看参考答案
MySQL 8.0