2024-11 小猿搜题 入门

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

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

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

能灵活应用才是王道。

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

任务:输出学生 460093 每次考试的语文、数学和英语成绩,每门学科的成绩在单独的一列中显示。

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

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 max case when

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

exam_date chinese_score math_score english_score
2024-03-30 110 119 107
2024-04-27 116 119 120
2024-05-25 108 116 110
2024-06-30 120 113 102

ID133 晚时段专车比例  
简单 group by case when 滴滴出行
ID180 数学成绩分段统计(2)  
中等 inner join max case when count 字符串处理 行列转化 多表连接 经典-学生表课程表 新东方
ID231 得物面试真题(4)首单Mac二单iPhone的客户  
困难 max case when row_number 窗口函数 CTE或SubQuery 客户订单分析 2025春招面试真题 得物
ID306 计算每个用户最近一次购买日期(R)  
简单 group by max 聚合函数 RFM模型 美团
ID640 迟到早退统计  
中等 group by max min case when count 聚合函数 CTE或SubQuery 画像标签开发 字节跳动

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

MySQL 8.0

00:00