返回

牛客SQL每日一题之SQL136 每类试卷得分前3名实战实操

后端

大家好,我是技术解密 ,很高兴在这里和大家分享牛客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名的解题思路和代码实现。希望对大家有所帮助。