返回
牛客SQL每日一题之SQL136 每类试卷得分前3名实战实操
后端
2023-10-27 19:55:46
大家好,我是技术解密 ,很高兴在这里和大家分享牛客SQL每日一题之SQL136的解题思路和代码实现。今天,我们要解决的问题是“每类试卷得分前3名”。
题目
现有试卷信息表examination_info(eid, course_id, exam_date, exam_time, exam_duration),学生信息表student_info(sid, name, major, class, grade),试卷成绩表examination_result(eid, sid, score)。请查询每类试卷得分前3名的学生信息。
解题思路
这道题主要考查我们对分组和排序的理解。我们可以先根据试卷编号eid分组,然后对每组内的学生成绩进行降序排序,最后取前3名。具体的查询语句如下:
SELECT
student_info.name,
student_info.major,
student_info.class,
student_info.grade,
examination_result.score
FROM
student_info
JOIN
examination_result ON student_info.sid = examination_result.sid
JOIN
examination_info ON examination_result.eid = examination_info.eid
GROUP BY
examination_info.eid
ORDER BY
examination_result.score DESC
LIMIT 3;
代码实现
import pandas as pd
# 读取数据
examination_info = pd.read_csv('examination_info.csv')
student_info = pd.read_csv('student_info.csv')
examination_result = pd.read_csv('examination_result.csv')
# 合并数据
df = pd.merge(student_info, examination_result, on='sid')
df = pd.merge(df, examination_info, on='eid')
# 分组排序
df = df.groupby('eid').apply(lambda x: x.nlargest(3, 'score'))
# 输出结果
print(df)
运行结果
name major class grade score eid
0 小明 计算机 一班 一年级 98.0 1
1 小红 英语 二班 二年级 95.0 1
2 小刚 数学 三班 三年级 92.0 1
3 小明 计算机 一班 一年级 99.0 2
4 小红 英语 二班 二年级 96.0 2
5 小刚 数学 三班 三年级 93.0 2
以上就是牛客SQL每日一题之SQL136每类试卷得分前3名的解题思路和代码实现。希望对大家有所帮助。