SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

【前言】先看一下最简单的sql语句以及最原始的效果图:

SELECT a.userName,a.userid FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第1张图片

【四种排序方式】

1.ROW_NUMBER()排序

我们将这几行数据进行简单的排序,另给一个新的列RN

SELECT a.userName,a.userid,ROW_NUMBER()OVER	(order by a.userName) AS RN FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第2张图片

这时,我想针对名字这一列,将重复的数据以1开头排序,不存在重复的就是1

SELECT a.userName,a.userid,ROW_NUMBER()OVER	(partition by a.userName ORDER by a.userName) AS RN FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第3张图片

2.RANK()排序

SELECT a.userName,a.userid,RANK()OVER	(ORDER by a.userName) AS RN FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第4张图片

这时排序的应该为3的值,因为出现重复数据,所以也变成了2,但是最后的行数和最后编号的值是一样的。

3.DENSE_RANK()排序

SELECT a.userName,a.userid,DENSE_RANK()over	(ORDER by a.userName) AS RN FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第5张图片

保持了重复的数据RN值相同,但值得注意的是第4行数据变成了3,也就是说行数和最后的编号是发生了变化的。

SELECT a.userName,a.userid,NTILE(2)over	(ORDER by a.userName) AS RN FROM dbo.t_user a

 

3.NTILE()排序

 

括号里面是几,就会分成几组

例如5行数据,分成2组,就会前面3个,后面2个,默认把多余的行分给前面;分成3组,第一组就会2个,第二组就会2个,第三组就会1个

SELECT a.userName,a.userid,NTILE(2)over	(ORDER by a.userName) AS RN FROM dbo.t_user a

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第6张图片

SELECT a.userName,a.userid,NTILE(3)over	(ORDER by a.userName) AS RN FROM dbo.t_user a
 

SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()_第7张图片

 

 

 

你可能感兴趣的:(ζ数据库,——sqlserver)