2024-11 小猿搜题 入门

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

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

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

能灵活应用才是王道。

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

任务:找出每个科目的平均分数,并按科目名称升序排列。只考虑考试日期为2024-06-30的数据。

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

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 avg

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

subject average_score
化学 52.5912
历史 54.0000
地理 52.9687
政治 53.8750
数学 63.6563
物理 51.6604
生物 52.4514
英语 64.4734

ID122 人均消费金额定档标签  
简单 group by avg case when sum 聚合函数 CTE或SubQuery 画像标签开发 美团
ID134 夜深与专车比例的相关系数  
简单 group by avg case when sum 滴滴出行
ID243 每个行业超过20年的公司  
中等 group by avg case when count datediff * / > 聚合函数 百分比计算 股市浅探 中金财富
ID246 计算用户观看视频的平均时长  
简单 group by avg timestampdiff 时间日期 聚合函数 短视频指标体系 快手
ID309 计算每个用户平均单笔消费金额(M)  
简单 group by avg cast 聚合函数 RFM模型 美团

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

MySQL 8.0

00:00