社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

Hello,MySQL-odbc exec删除重复值

爬虫俱乐部 • 5 年前 • 557 次点击  

爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,我们的课程均有回放功能,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文爬虫俱乐部隆重推出网上直播课程第一季

有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

 

在往期推文中——Hello,MySQL——odbc insert导入stata数据,我们介绍了如何把stata中的数据导入到mysql。由于小编的“粗心”,运行了两次sample文件,导致部分观测值出现了重复现象,今天,小编就给大家带来如何删除重复值。

COUNT()与GROUP BY

查看重复数据


首先先让观众老爷们看一下小编的sample表,键入以下命令:

odbc load,table("sample") dsn("Stata_MySQL") noq clear

list

运行结果如下:

可以看出,我们的sample表中, id为1到6的观测值出现了两次,id为8的也出现了两次。那么问题来了,如何删除这些重复值呢?观众老爷们不用急,小编这就给大家慢慢道来。

我们键入以下命令:

local cols `"SELECT id,COUNT(*) FROM sample GROUP BY id"'

odbc exec("`cols'"), dsn("Stata_MySQL")

运行结果如下:

这里我们用了COUNT()函数,在mysql中,COUNT()表示确定表中行的数目或符合特定条件的行的个数,GROUP BY语句在mysql中表示分组,相当于stata中bysort。可以看到只有id 等于7出现一次,其他都出现两次,那么我们怎么删除重复值呢?在stata中,其实我们duplicates drop id,就可以实现这个操作,那么我们怎么用stata连接mysql对数据库进行操作?

ALTER TABLE

为既有表添加主键


也许会有小伙伴会说,直接判断COUNT(*)大于1,然后把大于一的删除就可以了,真是太聪明了,不过这里有一个问题,这里判断COUNT(*)是否大于一,不用mysql中WHERE语句,因为WHERE过滤过滤指定的是行,而不是分组,所以我们得另谋出路——HAVING,键入以下命令:

local cols `"SELECT id,COUNT(*) FROM sample GROUP BY id HAVING COUNT(*) > 1;"'

odbc exec("`cols'"), dsn("Stata_MySQL")

我们可以看到,原来八条数据变成了七条,id为7的因为只出现一次,就没有出现在查询结果里。因为我们的数据集中两条数据是一模一样,所以电脑不知道该删哪个不该删哪个,可喜的是我们可以再生成一个主键(1,2,…,n),然后我们就可以根据主键不同把重复值删了。键入以下命令:

local cols `"alter table sample add number int(1) not null primary key auto_increment;"'

odbc exec("`cols'"), dsn("Stata_MySQL")

odbc load,table("sample") dsn("Stata_MySQL") noq clear

运行结果如下:

我们查看一下表sample,结果如下:

嵌套查询

删除重复值


可以看出,我们生成了一个1到15的主键列,接下来我们就可以按照这个主键去除重复值,我们的思路是删除重复值保留number比较大的那行。

键入以下命令:

local cols `"delete from sample where number in (select number from  (select number from sample group by id having count(id) > 1) as t);"'

odbc exec("`cols'"), dsn("Stata_MySQL")

odbc load,table("sample") dsn("Stata_MySQL") noq clear

运行结果如下:

我们再次查看一下表sample,结果如下:

这样,我们就把重复值删除了,保留number比较大的那行。Mysql中删除用的是delect语句,这里需要注意的是MySQL中delete 语句子查询有限制,使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误,我们可以通过多加一层select 别名表来变通解决。

注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~


                                   

             文字编辑:何雪泽

  技术总编:刘贝贝

往期推文推荐:

1.爬虫俱乐部新版块--和我们一起学习Python

2.hello,MySQL--Stata连接MySQL数据库

3.hello,MySQL--odbcload读取MySQL数据

4.再爬俱乐部网站,推文目录大放送!

5.用Stata生成二维码—我的心思你来扫

6.Hello,MySQL-odbc exec查询与更新

7.Python第一天

8.Python第二天

9.事件研究大放送




关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/yH5IRtCLfw
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/11362
 
557 次点击