统计学专业同学需要掌握的数据库基本用法

摘要:大数据时代,数据库已经成了统计学专业学生不得不掌握的一项基本技术。不论是对于基础理论知识薄弱的本科学生,或者是有一定理论基础的硕士,都要对数据库有所了解。然而,我们没必要全面的掌握数据库的所有知识,即便是常说的增删改查也没必要全部掌握。原因在于,数据分析、数据挖掘、机器学习是我们最日常的工作,我们需要的,仅仅是有能力从数据库中拿出想要的数据,因此,对于数据库,需要深刻理解和掌握的,通常就是一个字。
本文,将围绕这一主题,结合大量的实际例子,相对深入浅出的讲述这些基本知识,希望能对需要的读者产生一些帮助。

1.SQL查询语句总结

1.01 查询所有行列

SELECT * FROM Table

1.02 查询特定的行和列

SELECT col1,col2,col3 FROM Table --查询指定的列

1.03 在查询中使用AS更改列名

SELECT Name AS 姓名 FROM Table

1.04 查询空行(关键字:is null, is not null)

SELECT Name FROM Table WHERE email is null
SELECT Name FROM Table WHERE email is not null

1.05 查询返回限制行数(关键字:top, percent)

select top 4 name from Table --返回name列的前4行
select top 60 percent subject from Table --返回subject列的前60%

–除此之外,可以结合where等条件语句,实现任意部分的数据提取 //当每一条数据都有一个特定的ID的时候,使用between and 是一种非常好的方法

1.06 查询排序(关键字:order by, asc[升序], desc[降序])

select * from Table order by grade1 desc

1.07 使用like(not like)进行模糊查询

注:like命令只作用于字符串

select * from Table_1 where name like ‘[张]%’

补充:一些常用的正则表达式:

‘[张]%’–表示筛选出第一个字是张的名字—>’[张李]%‘表示筛选出第一个字是张或者李的名字,以此类推
‘_[张]%’–表示筛选出第二个字是张的名字–>’__[张]%'表示筛选出第三个字是张的名字
‘[^张]%’–表示筛选出除了第一个字是张的名字,和上面规则结合使用

1.08 使用between and(not between and)在某个范围内进行查询 --当每一行均有属于自己特定的ID时,可以使用该命令选择出第m到n行的数据

select * from Table_1 where grade1 between 70 and 90

注:sql server中不能使用limit

1.09 使用in在列举值内进行查询

select * from Table_1 where teacher in (‘王华’,‘李明’)


1.10 使用group by进行分组查询

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher

补充:group by和order by搭配使用

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher order by AVG(grade3) desc

1.11 使用having进行分组筛选

select teacher as 任课老师, AVG(grade3) as 平均分 from Table_1 group by teacher having AVG(grade3) >= 70

【一个小说明】
关于top, limit, rownum,在sql server 中使用top;在mysql中使用limit;在oracle中使用rownum。

2.处理日期的语句大全

2.1-- playing interval
select sysdate + interval ‘3’ day as “3天后”
from dual
SELECT SUBSTR(to_char(sysdate - interval ‘3’ year ,‘yyyyMMdd’),1,6) FROM dual
2.2–加法
SELECT SYSDATE,ADD_MONTHS(SYSDATE,12) FROM DUAL; --加1年
SELECT SYSDATE,ADD_MONTHS(SYSDATE,1) FROM DUAL; --加1月
SELECT SYSDATE,TO_CHAR(SYSDATE+7,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1星期
SELECT SYSDATE,TO_CHAR(SYSDATE+1,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1天
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1小时
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1分钟
SELECT SYSDATE,TO_CHAR(SYSDATE+1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --加1秒
2.3–减法
SELECT SYSDATE,ADD_MONTHS(SYSDATE,-12) FROM DUAL; --减1年
SELECT SYSDATE,ADD_MONTHS(SYSDATE,-1) FROM DUAL; --减1月
SELECT SYSDATE,TO_CHAR(SYSDATE-7,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1星期
SELECT SYSDATE,TO_CHAR(SYSDATE-1,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1天
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1小时
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1分钟
SELECT SYSDATE,TO_CHAR(SYSDATE-1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) FROM DUAL; --减1秒

SELECT TO_CHAR(SYSDATE,‘YYYYMMDD W HH24:MI:SS’) FROM DUAL --获得当前日期是本月第几周
SELECT TO_CHAR(SYSDATE,‘W’) FROM DUAL --获得当前日期是本月第几周

SELECT SYSDATE,TO_CHAR(SYSDATE,‘D’) FROM DUAL --取得当前日期是一个星期中的第几天,【注意星期日是第一天】

SELECT TO_CHAR(SYSDATE,‘yyyy’) FROM DUAL; --年
SELECT TO_CHAR(SYSDATE,‘Q’ )FROM DUAL; --季
SELECT TO_CHAR(SYSDATE,‘mm’) FROM DUAL; --月
SELECT TO_CHAR(SYSDATE,‘dd’) FROM DUAL; --日
SELECT TO_CHAR(SYSDATE,‘day’) FROM DUAL --取当前日期是星期几

2.4–得到当前日期
SELECT TO_CHAR(SYSDATE,‘DDD’) FROM DUAL --今天是今年的第N天
SELECT ADD_MONTHS(SYSDATE,24) FROM DUAL --给现在的日期加上2年
SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(SYSDATE,‘y’)+31),‘dd’),‘29’,‘闰年’,‘平年’) FROM DUAL --判断某一日子所在年分是否为润年
SELECT DECODE(TO_CHAR(LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,48),‘y’)+31),‘dd’),‘29’,‘闰年’,‘平年’) FROM DUAL --判断4年后是否是闰年

SELECT CEIL(TO_NUMBER(TO_CHAR(SYSDATE,‘mm’))/3) FROM DUAL; --得到日期的季度
SELECT TO_CHAR(SYSDATE, ‘Q’) FROM DUAL; --得到日期的季度

(参考链接:https://www.cnblogs.com/forever-love-zjl/p/9717413.html)

3.一些经常用到的函数

3.1. coalesce()函数

语法: coalesce(exp1,exp2) 如果exp1是NULL,则coalesce(exp1,exp2) = exp2 ,否则,coalesce(exp1,exp2) = exp1

3.2. over()函数

 题记:over, over, over ... ...

语法: over(partition by exp2, order by exp3) 根据exp2对结果进行分区,在各分区内对exp3进行排序

over()函数不能单独使用,需要与row_number, rank(), dense_rank(), lag(), 和 lead(), sum()等配合使用

举一反三的小插曲: group by 和 partition by 的区别

group by 是聚合函数,group by会将数据进行压缩,在计算一些数字特征,如:sigma, mu 等特征值的时候回非常有用
partition by 是分区函数,ta会对结果集按照指定字段分层排列,不会对结果集产生压缩效果
eg:将公司所有人按照部门进行分区,会发现结果集中同一部门的人会连续排列

根据配合使用的函数不同,分层次介绍:

  • row_number(),rank(),dense_rank()
  • lag()与lead()
  • sum()

1、与row_number(),rank(),dense_rank()的使用

这三个函数与over连用时,order by不能丢失,不写partition by时,默认结果集为一整个分区。

–具体看参考链接

(参考链接:https://blog.csdn.net/a1065423444/article/details/75635611)


– row_number()与over()搭配使用

– 先按照部门进行分区,再对金额进行排序 – rn不允许并列!!!

select xmda002 as 业务员id, xmda003 as 部门id,
row_number() over(partition by xmda003 order by xmda016xmda041) as rn,xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20


–rank()与over()搭配使用

–先按部门进行分区,再对金额进行排序 – rk允许并列,但是…唉,描述不来,懒得描述!!!

select xmda002 as 业务员id, xmda003 as 部门id,
rank() over(partition by xmda003 order by xmda016xmda041) as rk, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20


–dense_rank()与over()搭配使用

–先按部门进行分区,再对金额进行排序 – drk允许并列,而且…唉,描述不来,懒得描述!!!

select xmda002 as 业务员id, xmda003 as 部门id,
dense_rank() over(partition by xmda003 order by xmda016xmda041) as drk, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

–以上三个搭配,各有各的应用场景,因地制宜即可!


– lag()与over()的搭配使用
– lag字段第一个值为空

select xmda002 as 业务员id, xmda003 as 部门id,
lag(xmda003) over(partition by xmda003 order by xmda016xmda041) as lag, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

– lead()与over()搭配使用
– lead字段最后一个值为空

select xmda002 as 业务员id, xmda003 as 部门id,
lead(xmda003) over(partition by xmda003 order by xmda016xmda041) as lead, xmda016xmda041 as 金额
from xmda_t where xmda002 is not null and rownum <= 20

– sum()与over() 搭配使用
– 啥玩意儿?跑一下就知道了!!!

select xmda002, xmda003, xmda016xmda041 as je,
sum(xmda016
xmda041) over(partition by xmda003) as yyqkn,
sum(xmda016xmda041) over(partition by xmda003 order by xmda016xmda041) as zn
from xmda_t
where xmda002 is not null and rownum <= 20

【一个小说明】
nvl()和coalesce()的区别:nvl()函数只适用用有限各参数,即nvl(a,b)
coalesce()函数可以适用于无限各参数,coalesce(a,b,c,d,e,f)
二者功能相同

结束语
熟练掌握了上述内容,再众里寻他千百度,应该可以满足统计学专业同学们的基本需求啦。希望对大家有所帮助。整理总结不容易,看完请给个赞,谢谢侬。
兴趣小贴士,关于PLS方法很不错的一篇文章:https://wenku.baidu.com/view/54fc75543b3567ec102d8aba.html

统计学专业同学需要掌握的数据库基本用法相关推荐

  1. 统计学要学的计算机课程有哪些,统计学专业主要课程学什么_课程设置安排及分类...

    [www.altdl.com.cn--专业课程] 2018年高考填报志愿时大学哪些专业就业前景好是广大考生和家长朋友们十分关系的问题,其实大学就业前景好的专业是和国家和社会的发展现状离不开的.统计学专 ...

  2. 经济统计学专业学C语言,2019经济统计学专业怎么样、学什么、前景好吗

    经济统计学是统计学在经济领域中的应用,是以经济数据为研究对象,包括经济数据的采集,以及用统计方法分析经济数据背后的经济现象以及复杂经济系统的规律,从而为经济和管理决策服务.下面是学习啦小编给大家带来的 ...

  3. 计算机科学和统计专业排名,2021统计学专业大学排名 哪个学校最好

    哪些大学开设了统计学专业?哪个学校统计学专业实力比较强?下面小编整理了统计学专业大学的排名,供大家参考! 2021统计学专业高校排行榜 在最新公布的统计学专业大学排名中,最好的学校是排名第一的南京大学 ...

  4. 杜克大学计算机统计学,杜克大学的统计学专业怎么样?

    杜克大学统计学专业简介: 杜克大学的统计学专业开设在统计学系(Department of Statistical Science)下,研究生开设有以下3个学位项目,即: 1.统计学硕士(MS in S ...

  5. 统计学专业未来从事大数据方向有优势吗?

    根据现在工业界的大数据就业情况来说(对于一般同学而非牛人),统计从事大数据来说优势小.对一般数据分析甚至建模有一定优势. 我这篇回答面向的是大部分水平还可以的统计本科生,他们也努力学习了专业课,编程基 ...

  6. 美国统计学专业研究生申请解析

    近几年美国统计学研究生申请比较热门,而且统计学专业在美国本土的就业前景十分乐观而且收入也很可观,所以申请这个专业的人和转专业的人非常多.接下来将为您详细解析美国统计学研究生申请. 美国统计学研究方向: ...

  7. 计算机统计学研究方向,在职研究生统计学专业的研究方向有哪些?

    统计学是通过搜索.整理.分析数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学.在职研究生统计学专业中用到了大量的数学及其它学科的专业知识,它的使用范围几乎覆盖了社会科学和自然科学 ...

  8. 应用统计学和计算机哪个好学,东北大学应用统计学专业要学哪些课程,好学吗?...

    考生:请问东北大学应用统计学专业要学哪些课程,好学吗? 东北大学应用统计学专业要学的课程小编已经收集整理好啦,至于好不好学,这个真说不上来,因人而异吧. 专业中文名称应用统计学 专业英文名称Appli ...

  9. 应用统计学与计算机论文2000字,应用统计学专业论文范文

    摘 要:检索关于"医学稿件统计学方法误用"主题的中文研究论文,对论文中提及的统计学误用方法进行系统分析并汇总,总结关于该主题论文的分布规律和发展脉络,并提出对该问题的应对策略. 关 ...

最新文章

  1. R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战
  2. 民非企业盈利怎么处理_对企业法人无力偿还债务时要怎么处理,如何解决?
  3. python安装模块方法_Python安装模块的几种方法
  4. 解决: Incorrect username or password, or no permission ( Docker 方式运行 Nexus3 登陆密码不为 admin123 、重置登陆密码)
  5. Codewars-Snail(Javascript实现螺旋数组)
  6. java基础-冒泡排序
  7. 转:Apple的App Analytics统计平台你必须知道的
  8. 【SPOJ:FAVDICE】Favourite Dice(概率dp)
  9. 六安技师学院计算机网络技术,安徽六安技师学院2021年招生简章
  10. 树莓派raspberry pi 4 SSH默认密码无法登录解决办法
  11. php对接触动精灵,触动精灵万能连点器 Lua 源码
  12. 关于2015年春运增开旅客列车的公告
  13. 把人脑“森林”上传到计算机:人类脑计划只是一个科幻野心?
  14. 经典网络建设方案案例
  15. 三战南京大学计算机学硕上岸,初试403经验贴
  16. 《匆匆那年》每一集的标题
  17. 47 WebGL雾化(大气效果)
  18. 虚拟机:虚拟机三种网络连接
  19. Android实现QQ分享功能
  20. 转: 网页设计中的一些色彩搭配技巧

热门文章

  1. Linux journalctl 命令
  2. 吞噬颜色html5游戏在线玩,《堡垒之夜》被黑洞吞噬,或将迎来大型更新
  3. 062_Apex使用Assert
  4. 在交互性要求强的场合,SilverLight使用Ajax是愚蠢选择
  5. 【语音识别】隐马尔可夫模型HMM
  6. 记一梦境与预备八关斋戒
  7. 在Angular web项目中调用本地扫描仪扫描文档
  8. 【5.21】六、自动化测试—概述
  9. 壁挂炉洗澡怎么调水温_沃乐夫壁挂炉如何设置洗浴温度
  10. Android操作系统发展史