【前言】先看一下最简单的sql语句以及最原始的效果图:
SELECT a.userName,a.userid FROM dbo.t_user a
【四种排序方式】
1.ROW_NUMBER()排序
我们将这几行数据进行简单的排序,另给一个新的列RN
SELECT a.userName,a.userid,ROW_NUMBER()OVER (order by a.userName) AS RN FROM dbo.t_user a
这时,我想针对名字这一列,将重复的数据以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
2.RANK()排序
SELECT a.userName,a.userid,RANK()OVER (ORDER by a.userName) AS RN FROM dbo.t_user a
这时排序的应该为3的值,因为出现重复数据,所以也变成了2,但是最后的行数和最后编号的值是一样的。
3.DENSE_RANK()排序
SELECT a.userName,a.userid,DENSE_RANK()over (ORDER by a.userName) AS RN FROM dbo.t_user a
保持了重复的数据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
SELECT a.userName,a.userid,NTILE(3)over (ORDER by a.userName) AS RN FROM dbo.t_user a