SQL四个排名函数(row_number、rank、dense_rank和ntile)的使用

一、row_number

  row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示:

select row_number() over(order by field1) as row_number,* fromt_table

二、rank

  rank函数考虑到了over子句中排序字段值相同的情况,为了更容易说明问题,在t_table表中再加一条记录,

select rank() over(order by field1),* from t_table order by field1

三、dense_rank

  dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。如上面的例子中如果使用dense_rank函数,第4条记录的序号应该是2,而不是4。如下面的SQL语句所示:

select dense_rank() over(order by field1),* from t_table order by field1

四、ntile

  ntile函数可以对序号进行分组处理。这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存放一定数量的记录。ntile函 数为每条记录生成的序号就是这条记录所有的数组元素的索引(从1开始)。也可以将每一个分配记录的数组元素称为“桶”。ntile函数有一个参数,用来指 定桶数。下面的SQL语句使用ntile函数对t_table表进行了装桶处理:

select ntile(4) over(order by field1)as bucket,* from t_table

posted @ 2013-08-07 21:22  lampon  阅读(316)  评论(0编辑  收藏  举报