ROW_NUMBER()、RANK()、DENSE_RANK区别

- 日理万妓 2023-10-04 19:01 109阅读 0赞

ROW_NUMBER()、RANK()、DENSE_RANK区别

ROW_NUMBER():排序,不会有重复的排序数值。对于相等的两个数字,排序序号不一致






















数值 排序序号
1 1
1 2
2 3
  1. select
  2. id,
  3. row_number()
  4. over(order by id) rn
  5. from
  6. data

DENSE_RANK():排序,可有重复值。对于相等的两个数字,排序序号一致






















数值 排序序号
1 1
1 1
2 2
  1. select
  2. id,
  3. dense_rank()
  4. over(order by id) rn
  5. from
  6. data

RANK():排序,可有重复值。对于相等的两个数字,排序序号一致,但是总数会减少






















数值 排序序号
1 1
1 1
2 3
  1. select
  2. id,
  3. rank()
  4. over(order by id) rn
  5. from
  6. data

如果窗口中over()无排序字段,那么结果如何?

  1. select
  2. id,
  3. rank()
  4. over()
  5. from
  6. data





















数值 排序序号
1 1
1 1
2 1

如果窗口中over()无排序字段,使用的是row_number()排序,结果如何?

  1. select
  2. id,
  3. row_number()
  4. over()
  5. from
  6. data





















数值 排序序号
1 1
2 2
1 3

这种现象的原因:

在over()窗口中,所有的数值排序都是一样的。对于rank因为允许重复,所以全为1,而row_number()不会有重复的排序序号,所以会为1,2,3,4,等,但是每次排序的结果都是不同的。

发表评论

表情:
评论列表 (有 0 条评论,109人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis # $ 区别

    在`MyBatis`中使用参数进行`SQL`拼装经常会使用到`{var}`和`${var}`两种参数的设置方式。下面是两种方式的不用之处: `{var}`

    相关 区别2

    mybatis是半自动化的,sql写在xml里,便于管理, 解除sql与程序代码的耦合,同时可以防止SQL注入。hibernate是全自动的,sql很多都是自动生成的,无法直接