爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多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 exec查询与更新中,我们已经简单介绍过这三块内容,分别是1.在查询中计算;2.嵌套查询;3.更新数据。有粉丝认为这三块内容都非常重要,而一篇推文不能够完整地把这三块讲清楚,所以小编今天就打算将查询这一块内容好好扩展扩展。我们就继续以sample和hobby这两个数据库为例,以四个小案例来进行实践操作吧。
首先给大家展示一下sample和hobby这两个表单中的内容:


查询出数学成绩或者英语成绩大于等于90分的同学有哪些。
首先,我们先使用odbc load来加载原始数据库sample表单的数据:
odbc load,table("sample")dsn("Stata_MySQL") noq clear
其次,将我们想要在MySQL中运行的语句保存在局部宏cols中:
local cols `" SELECT name,math,english FROM sample WHERE math >=90 or english >=90"'
其中,WHERE是条件查询条件,查询sample表单中所有math大于90或者english大于90的观测值。
最后,通过使用odbc exec命令在MySQL中返回查询结果:
odbc exec("`cols'"), dsn("Stata_MySQL")
得到:

计算所有同学的平均成绩,并按照平均成绩的高低,查询出平均分最高的前两位。
具体操作步骤如下:
local cols `"SELECT name,sum(math+english+chinese)/3 as avg_count from sample group by id order by 2 DESC LIMIT 2 "'
odbc exec("`cols'"), dsn("Stata_MySQL")
在上面这条SQL程序中值得注意的是,sum一般都是用来计算列和,怎样才能使它计算行和呢?在这里,我们只需要添加group by id,意为以id分组,在每组中使用sum函数计算,则它就会按照每一个id名计算每一行的行和。此外,order by 2 DESC LIMIT 2 表示的是按照平均分的大小由大到小排序后,提取最前面两条的信息。
最后我们可以得到:

比方说所有学生的数学成绩都只储存在sample这个数据库中,而所有学生的兴趣爱好都储存在hobby这个数据库中,我们现在想要创建一个组合值,具体形式为name-math-hobby的字符串形式,最后的结果按照所有学生名字的开头字母进行排序输出。
local cols `"SELECT CONCAT(sample.name,'-',math,'-',myhobby) as hobby from sample,hobby ORDER BY sample.name"'
odbc exec("`cols'"), dsn("Stata_MySQL")
拼接的函数我们使用的是concat,该函数接收若干参数,并将其以字符串形式连接作为新变量,由于两个数据库中都有name这个变量,所以在选择时,必须注明你使用的name是来自哪个数据库的,否则会报错,而如果变量在某个数据库中唯一存在,那么就可以不用注明是来自哪个数据库的,比如myhobby。连接符为‘-’。最后进行排序的时候,选择name这一变量即可。
最后结果为:

将所有的同学分成男生和女生两组,分别查询男生和女生中总成绩最高的同学。
local cols `"SELECT name,gender ,max(chinese+math+english) as total_score from sample GROUP BY gender;"'
odbc exec("`cols'"), dsn("Stata_MySQL")
我们使用group by gender 将所有的同学按照性别分成两组,计算所有同学的总成绩,使用max函数计算两组中总分最高的同学,最后列出查询结果。
最后结果为:

由上图我们可以知道,Amy和Alan分别是女生和男生中总成绩最好的两位同学。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过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分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
