数据分析面试必备——SQL经典50题思路及答案详解

大神们帮我问下,数据分析面试必备——SQL经典50题思路及答案详解
最新回答
你可真迷人

2024-09-21 04:48:20

声明:下列代码在mysql8.0均可以运行。

专门花了些时间,刷完了SQL经典50题。由于前面有些题目比较难,中间有时候老是卡克,所以给大家一点预期。如果过程中遇到难题,没有思路,可以跳过,或者直接参考思路及代码。也算是刷题的路上,自己的一点记录吧,希望能够帮到各位小伙伴~

对考查的知识点小结一下:

涉及基础知识:

WHERE 指定筛选条件;GROUP BY 分组;COUNT()等聚合函数;HAVING 对聚合函数筛选;ORDER BY 排序;子查询(好像没有考查关联子查询);表联结JOIN;自联结;窗口函数 OLAP row_number()/rank()/dense_rank() over(),组内排名PARTITION BY。以及各种各样小的知识点:函数、日期函数、CASE WHEN、IN/LIKE,字符串截取函数substr(),字符串拼接concat()等。基本考查了DML的基础操作,对于DDL的考查较少。

表结构:合计四张表

sc表,即学生成绩表,包含sid(学号)、cid(课程号)、score(成绩)3个字段。

student表,即学生信息表,包含sid(学号)、sname(姓名)、sage(出生日期)、ssex(性别)4个字段。

teacher表,即老师表,包含tid(教师号)、tname(教师姓名)2个字段。

course表,即课程表,包含cid(课程号)、cname(课程名)、tid(授课教师号)3个字段。

题目

创建表,插入数据

思路及答案解析

所谓思路,其实就是翻译翻译。

1、查询“01”课程比“02”课程成绩高的所有学生的学号;

2、查询平均成绩大于60分的同学的学号和平均成绩;

3、查询所有同学的学号、姓名、选课数、总成绩

4、查询姓“李”的老师的个数;

5、查询没学过“张三”老师课的同学的学号、姓名;

6、查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名;

7、查询学过“张三”老师所教的课的同学的学号、姓名;

8、查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;

9、查询所有课程成绩小于60分的同学的学号、姓名;

10、查询没有学全所有课的同学的学号、姓名;

11、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;

12、查询和"01"号的同学学习的课程完全相同的其他同学的学号 考查知识点:子查询

13、把“SC”表中“张三”老师教的课的成绩都更改为此课程的平均成绩;(可以不用做这道题,不然数据都被修改了)

14、查询没学过"张三"老师讲授的任一门课程的学生姓名

15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

16、检索"01"课程分数小于60,按分数降序排列的学生信息

17、按平均成绩从高到低显示所有学生的平均成绩

18、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率

19、按各科平均成绩从低到高和及格率的百分数从高到低顺序

20、查询学生的总成绩并进行排名

21、查询不同老师所教不同课程平均分从高到低显示

22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比

24、查询学生平均成绩及其名次

25、查询各科成绩前三名(允许并列名次且连续)的记录

26、查询每门课程被选修的学生数

27、查询出只选修了一门课程的全部学生的学号和姓名

28、查询男生、女生人数

29、查询名字中含有"风"字的学生信息

30、查询同名同性学生名单,并统计同名人数

结果都是空,不存在

31、查询1990年出生的学生名单(注:Student表中Sage列的类型是datetime)

32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

33、查询包含不及格成绩的课程,并按课程号从大到小排列

34、查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;

35、查询选修“张三”老师所授课程的学生中,成绩最高的学生姓名及其成绩

36、查询每门功课成绩最好的前两名

-- 与25题一样,窗口函数实现组内排序partition by (易错,不自觉的就会加上group by ,但聚合的结果是,每组只显示一条数据)

37、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

38、检索至少选修两门课程的学生学号

39、查询选修了全部课程的学生信息

40、查询各学生的年龄

41、查询本周过生日的学生

42、查询下周过生日的学生

43、查询本月过生日的学生

44、查询下月过生日的学生