最近在做一个大数据相关项目,前期主要是写一些SQL脚本从数据源中提取数据进行分析。由于本人之前对SQL的使用不是特别多,所以也遇到不少坑,特此总结一下。
一、排序
说到排序,主要会使用到如下函数:ROW_NUMBER(),RANK(),DENSE_RANK(),下面开始详细介绍。
PS:在MySQL中没有这些函数,需要在SQLserver和Oracle中使用。
为了更好理解,先创建个人员成绩表:
1、ROW_NUMBER()
定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,一般多用于分页查询,
比如查询前10条 查询10-100条。
例:select ROW_NUMBER() over( order by user_score desc) number, * from userscore
2、RANK()
定义:RANK()函数,排名函数,可以对某一个字段进行排名,这里为什么和ROW_NUMBER()不一样那,ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样出现相同的,他们的排名是一样的。
例:select RANK() over( order by user_score desc) user_rank, * from userscore
3、DENSE_RANK()
定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名。但是DENSE_RANK()排名是连续的,RANK()是跳跃的排名,所以一般情况下用的排名函数就是RANK()。
例:select DENSE_RANK() over( order by user_score desc) user_rank, * from userscore
二、查询最近一个月内容
在项目中,经常会有按日期查询的需求,一般可以使用add_months()—oracle, adddate()—mysql,下面举例说明如何查询最近一个月的内容
创建带日期的人员成绩表
例:select * from userscore where score_date > add_months(sysdate, -1) order by user_id, user_score asc
ps:当前日期2018-07-21
三、类型转换
SQL中一般有两个类型转换函数:
1、CAST ( expression AS data_type)
2、CONVERT ( data_type, expression,[style]) —styl可以为空,其指明要转换的格式
以上就是最近使用到SQL的一些总结,都是些比较常用的。