最近在做一个大数据相关项目,前期主要是写一些SQL脚本从数据源中提取数据进行分析。由于本人之前对SQL的使用不是特别多,所以也遇到不少坑,特此总结一下。

一、排序

说到排序,主要会使用到如下函数:ROW_NUMBER(),RANK(),DENSE_RANK(),下面开始详细介绍。

PS:在MySQL中没有这些函数,需要在SQLserver和Oracle中使用。

为了更好理解,先创建个人员成绩表:

关于SQL语句的总结

1、ROW_NUMBER()

定义:ROW_NUMBER()函数作用就是将select查询到的数据进行排序,每一条数据加一个序号,一般多用于分页查询, 

比如查询前10条 查询10-100条。

:select  ROW_NUMBER()  over( order by user_score desc) number, * from userscore

关于SQL语句的总结


2、RANK()

定义RANK()函数,排名函数,可以对某一个字段进行排名,这里为什么和ROW_NUMBER()不一样那,ROW_NUMBER()是排序,当存在相同成绩的学生时,ROW_NUMBER()会依次进行排序,他们序号不相同,而Rank()则不一样出现相同的,他们的排名是一样的。

例:select  RANK()  over( order by user_score desc) user_rank, * from userscore

关于SQL语句的总结


3、DENSE_RANK()

定义:DENSE_RANK()函数也是排名函数,和RANK()功能相似,也是对字段进行排名。但是DENSE_RANK()排名是连续的,RANK()是跳跃的排名,所以一般情况下用的排名函数就是RANK()。

select  DENSE_RANK()  over( order by user_score desc) user_rank, * from userscore

关于SQL语句的总结


二、查询最近一个月内容

在项目中,经常会有按日期查询的需求,一般可以使用add_months()—oracle, adddate()—mysql,下面举例说明如何查询最近一个月的内容

创建带日期的人员成绩表

关于SQL语句的总结

:select * from userscore where score_date > add_months(sysdate, -1) order by user_id, user_score asc

关于SQL语句的总结

ps:当前日期2018-07-21


三、类型转换

SQL中一般有两个类型转换函数:

1、CAST ( expression AS data_type) 

2、CONVERT ( data_type, expression,[style]) —styl可以为空,其指明要转换的格式

以上就是最近使用到SQL的一些总结,都是些比较常用的。


相关文章: