语法:ROW_NUMBER()  OVER();

row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。

rank函数用于返回结果集的分区内每行的排名,行的排名是相关行之前的排名数加一。简单来说rank函数就是对查询出来的记录进行排名,与row_number函数不同的是,rank函数考虑到了over子句中排序字段值相同的情况,如果使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名号排下一个,也就是相关行之前的排名数加一,可以理解为根据当前的记录数生成序号,后面的记录依此类推。

dense_rank函数的功能与rank函数类似,dense_rank函数在生成序号时是连续的,而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时,将不跳过相同排名号,rank值紧接上一次的rank值。在各个分组内,rank()是跳跃排序,有两个第一名时接下来就是第三名,dense_rank()是连续排序,有两个第一名时仍然跟着第二名。

关于Parttion by:Parttion by关键字是Oracle中分析性函数的一部分,用于给结果集进行分区。它和聚合函数Group by不同的地方在于它只是将原始数据进行名次排列,能够返回一个分组中的多条记录(记录数不变),而Group by是对原始数据进行聚合统计,一般只有一条反映统计值的结果(每组返回一条)。

TIPS:

使用rank over()的时候,空值是最大的,如果排序字段为null, 可能造成null字段排在最前面,影响排序结果。

可以这样: rank over(partition by course order by score desc nulls last)

总结:

  在使用排名函数的时候需要注意以下三点:

  1、排名函数必须有 OVER 子句。

  2、排名函数必须有包含 ORDER BY 的 OVER 子句。

  3、分组内从1开始排序。

最新文章

  1. Linux下小工具使用总结
  2. 09-Java 工程结构管理
  3. 利用C#实现对excel的写操作
  4. user-agent查询
  5. 加密传输SSL协议5_Hash Function
  6. lightOJ 1047 Neighbor House (DP)
  7. 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
  8. 灵玖Nlpir Parser智能挖掘汉语精准分词
  9. 关于Java中的Null
  10. 使用jquery.pjax实现SPA单页面应用
  11. 网络编程基础【day10】:进程与线程介绍(一 )
  12. DL服务器主机环境配置(ubuntu14.04+GTX1080+cuda8.0)解决桌面重复登录
  13. 将自己的域名解析跳转到博客主页(GitHub中的gitpage跳转)
  14. POJ 2367 Genealogical tree 拓扑排序入门题
  15. HDU 1728 逃离迷宫 BFS题
  16. Linux定时运行程序脚本
  17. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
  18. assert语句(assert用来判断语句的真假)
  19. HttpClient 解释
  20. blender, merge顶点

热门文章

  1. nyoj 97-兄弟郊游问题(数学)
  2. Spring boot 加入shiro支持
  3. 【前端知识体系-JS相关】JS-Web-API总结
  4. 动手造轮子:实现简单的 EventQueue
  5. 实现 Redis 协议解析器
  6. PL真有意思(四):控制流
  7. 父组件向子组件传值时,值已经传过来却没有触发子组件的watch监听,解决~
  8. Java关于Resource leak: 's' is never closed的问题
  9. 2019-11-7:sql注入防御,webshell概念,学习笔记
  10. no matches for kind "Deployment" in version "extensions/v1beta1"