MYSQL
-
现有学生表如下:
需求:
用一条SQL 语句删除除了自动编号不同, 其他都相同的学生冗余信息
解题思路:参照Leetcode_SQL-简单-196-删除重复的电子邮箱
建表:
create table tb_student_score(自动编号 int,学号 int,姓名 varchar(20),课程编号 int,课程名称 varchar(20),分数 int);
insert into tb_student_score values(1,2005001,'张三',0001,'数学',69);
insert into tb_student_score values(2,2005002,'李四',0001,'数学',89);
insert into tb_student_score values(3,2005001,'张三',0001,'数学',69);
选择出重复的内容,且编号要保留较大的。
select a.*
from tb_student_score a, tb_student_score b
where a.学号=b.学号 and a.姓名=b.姓名 and a.课程编号=b.课程编号 and a.课程名称=b.课程名称 and a.分数=b.分数 and a.自动编号>b.自动编号;
将上面代码的select改为delete,对选中的重复内容进行删除
如果报错Error Code 1175,参考下面的文章
参考文章
delete a.*
from tb_student_score a, tb_student_score b
where a.学号=b.学号 and a.姓名=b.姓名 and a.课程编号=b.课程编号 and a.课程名称=b.课程名称 and a.分数=b.分数 and a.自动编号>b.自动编号;
查询结果
select * from tb_student_score;
2.现有一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛;
需求:
用一条sql 语句显示所有可能的比赛组合
建表:
create table team(name varchar(20));
insert into team values('a');
insert into team values('b');
insert into team values('c');
insert into team values('d');
先做一个自连接形成笛卡尔积,看看有多少种组合
select *
from team a, team b;
因为字母也可根据顺序比较大小,所以通过这一点来对数据进行筛选
select *
from team a, team b
where a.name
Python
1.理解DataFrame.reset_index 函数中 drop,append,inplace参数作用
创建一个DataFrame以便观察
df = pd.DataFrame(np.arange(20).reshape(5,4),index=[1,3,4,6,8])
df
先看看不设置参数的reset_index()
df.reset_index()
设置参数drop=True参数,可以发现之前的index没有作为一列添加到DataFrame中。因此drop=True的含义是重置索引,并将原来的索引舍弃,不作为一列添加在DataFrame中。
df.reset_index(drop=True)
我们在执行reset_index()后,再看看df,会发现df并没有发生变化,也就是说reset_index()没有生效。
但是当我们加上参数inplace=True时,发现reset_index()生效了。说明Inplace=True是指在原本的数据上进行修改,而不是返回一个新的数据。
df.reset_index(inplace=True)
df
关于append参数,在说明文档里搜索不到,自己也没有用到过。不是很明白。
2.现有两个DataFrame : df1,df2
如何将df2附加到df1的末尾
创建DataFrame
df1=pd.DataFrame({'a':[1,2,3,4],'b':[5,6,7,8]})
df2=pd.DataFrame({'a':[1,2,3],'b':[5,6,7]})
利用concat连接
pd.concat([df1,df2])
3.如何正确理解 if name == 'main'
name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行;当模块是被导入时,代码块不被运行。
4.for in range()的作用是什么?
for in range()的作用可以理解为对range()里的每一个元素进行遍历,即依次取出range()里的每一个元素。
关于range
操作题目
使用python读取excel数据,保存到mysql
总共三步:导包→读取→写入
#导入模块
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
#读取excel
content=pd.read_excel(r'C:\Users\admin\Desktop\pt_overall_sale_performance_1_vayne.xlsx')
#存入数据库
engine = create_engine("mysql://{}:{}@{}/{}?charset={}".format('用户名', '登录密码', '127.0.0.1:3306', '数据库名','字符编码'))
content.to_sql('pt_overall_sale_performance_1_vayne',con = engine,if_exists='append', index=False)