2024-11 小猿搜题 入门

我发誓:每一道题目都不超过如下知识点。

如果超过了,就让凤姐和乔碧萝蹂躏我一百次。

SQL跟初中数学一样,记忆概念、用法是没卵用的。

能灵活应用才是王道。

====================================================================================================

任务:找出每次考试成绩都不低于80分的学生,并按学生ID进行排序。

本题中,如果一个学生记录的每次月考成绩为80、80、80、null,则该学生也符合条件。

====================================================================================================

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 子句中。

经典-学生表课程表 group by min having

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

student_id max_score min_score avg_score
141772 115 80 95.6667
235411 120 81 97.0000
276688 120 83 95.0556
314454 120 84 96.3056
392875 120 83 96.7222

ID23 分组与聚合函数(5)想知道何时成瘾,用Max Or Min?
入门 group by and min 聚合函数 入门-闺蜜捉奸记 思扣SQLintern
ID92 每日新增用户  
简单 group by between and date min count having 时间日期 聚合函数 CTE或SubQuery 美团
ID194 GROUP BY-年龄最大学生的出生日期
入门 group by min 经典-学生表课程表 小猿搜题
ID200 HAVING-执教教师超过3人的科目
入门 group by count having 经典-学生表课程表 小猿搜题
ID204 小结-缺考超过5次的学生  
入门 group by sum having 经典-学生表课程表 小猿搜题

 点击下方空白区域即可查看参考答案

MySQL 8.0

00:00