题⽬知乎链接:
https://zhuanlan.zhihu.com/p/38354000
https://zhuanlan.zhihu.com/p/43289968
![](https://img-blog.csdnimg.cn/direct/0f689e3ffc2d420c8a27fef4dddfc191.png)
![](https://img-blog.csdnimg.cn/direct/1b7835a816f342aa843dcad7b1ee5843.png)
1.1思路,先把score那个表变形成:
1.2 先学号和课程0001汇总:
1.3再学号和课程号0002汇总:
1.4把上面两个表用inner join连接起来。
SELECT student.学号, A.成绩 AS score01, B.成绩 AS score02
FROM ( select * from score where score.课程号 = '0001' ) AS A
INNER JOIN ( select * from score where score.课程号 = '0002' ) AS B ON A.学号 = B.学号
INNER JOIN student ON A.学号 = student.学号 ;
1.5要在1.4的基础上,加个where筛选,就可以把结果筛出来了。
WHERE A.成绩 > B.成绩 ;
【注意!WHERE里面 要用A.成绩 > B.成绩 ,而不能用新的变量名 score01>score02 来写】
完整的SQL语句:
SELECT student.学号, A.成绩 AS "score01", B.成绩 AS "score02"
FROM ( select * from score where score.课程号 = '0001' ) AS A
INNER JOIN ( select * from score where score.课程号 = '0002' ) AS B ON A.学号 = B.学号
INNER JOIN student ON A.学号 = student.学号
WHERE A.成绩 > B.成绩 ;
import pandas as pd import requests import pymysql from lxml import etree import time import csv import random import sys ###重点。 #1.连接数据库 conn = pymysql.connect(host='localhost', user='root', passwd='root', db='new_students', port=3306, charset='utf8') cursor = conn.cursor() #2.读取数据 sql_student = 'select * from student' sql_score = "select * from score" df_student = pd.read_sql(sql_student,conn) print(df_student) df_score = pd.read_sql(sql_score,conn) print(df_score) print("-"*100) #3.根据学号构建一个新的dataframe。 for i in range(len(df_student)): for j in range(len(df_score)): if df_student.loc[i,"学号"] == df_score.loc[j,"学号"] and df_score.loc[j,"课程号"] == "0001": df_student.loc[i, "课程01的成绩"] = df_score.loc[j,"成绩"] if df_student.loc[i,"学号"] == df_score.loc[j,"学号"] and df_score.loc[j,"课程号"] == "0002": df_student.loc[i, "课程02的成绩"] = df_score.loc[j,"成绩"] print(df_student) print("-"*100) #4.筛选出 课程01的成绩 > 课程02的成绩 所在行。 df_final = df_student[df_student["课程01的成绩"] > df_student["课程02的成绩"]] print(df_final) print("-"*100) #5.打印出学号 print("课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号为:") print(df_final["学号"].to_list())
![](https://img-blog.csdnimg.cn/direct/5ac9406ab80b49dfab8e7d3d60934b54.png)