参数:

PARTITION BY
将查询结果集分为多个分区。 开窗函数分别应用于每个分区,并为每个分区重新启动计算。

<ORDER BY 子句>
定义结果集的每个分区中行的逻辑顺序。 也就是说,它指定按其执行开窗函数计算的逻辑顺序。

数据值:
rank () over , row_number() over ,rank_dense ()

总结如下:
我创建了一个表,数据如下,
SQL> select * from test;
       A1       A2
---------- ----------
      1       3
      2       4
      3       2
      3       5
      4       2
然后用rank () over,
SQL> select a1,a2,rank () over (order by a1) rank from test;
       A1       A2    RANK
---------- ---------- ----------
      1       3       1
      2       4       2
      3       2       3
      3       5       3
      4       2       5
SQL> select a1,a2,rank () over (order by a2) rank from test;
       A1       A2    RANK
---------- ---------- ----------
      3       2       1
      4       2       1
      1       3       3
      2       4       4
      3       5       5
原来这个就是用来看排名的东东啊。
接下来看看row_number() over,
SQL> select a1,a2, row_number () over (order by a1) rank from test;
       A1       A2    RANK
---------- ---------- ----------
      1       3       1
      2       4       2
      3       2       3
      3       5       4
      4       2       5
SQL> select a1,a2, row_number () over (order by a2) rank from test;
       A1       A2    RANK
---------- ---------- ----------
      3       2       1
      4       2       2
      1       3       3
      2       4       4
      3       5       5
黄色标出了区别,这个很容易看清楚吧~~~
再看看dense_rank () over
SQL> select a1,a2, dense_rank () over (order by a1) rank from test;
       A1       A2    RANK
---------- ---------- ----------
      1       3       1
      2       4       2
      3       2       3
      3       5       3
      4       2       4
dense_rank在有出现相同的rank后,rank的值是紧接上一次的rank值。
可以这么理解,我们通常意义上的top N 的实现应该采用row_number() over 而不是rank () over,因为row_number 是给记录加一个序号标记,而rank 是相当于进行排序后的排名,也就是如果排序列是相同的,那么他们的返回值也是相同的,而row_number则不可能返回相同值。
放到一起看看吧:
SQL> select a1,a2,
2 rank () over (order by a1) rank,
3 dense_rank () over (order by a1) dense_rank,
4 row_number () over (order by a1) row_number
5 from test;
       A1       A2    RANK DENSE_RANK ROW_NUMBER
---------- ---------- ---------- ---------- ----------
      1       3       1       1       1
      2       4       2       2       2
      3       2       3       3       3
      3       5       3       3       4
      4       2       5       4       5

row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的

SQL 的Over 子句相关推荐

  1. SQL基础---SQL ORDER BY 子句

    SQL ORDER BY 子句 ORDER BY 语句用于对结果集进行排序. ORDER BY 语句 ORDER BY 语句用于根据指定的列对结果集进行排序. ORDER BY 语句默认按照升序对记录 ...

  2. SQL SELECT TOP 子句详解

    SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目.语法如下 SELECT TOP number|percent column_name(s) FROM tabl ...

  3. SQL之with子句

    with 语句 with 语句相当于建立了一张 临时虚拟表 即利用with子句为子查询的数据集作为一个内存临时表. 在内存中解析,提高执行效率.,并且提高SQL语句的可读性,用完即销毁. 语法 可以同 ...

  4. python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...

    我正在从Python(使用MySQLDb)运行一个动态MySQL查询,该查询包括一个包含字符串值的" in list"子句.执行此功能的函数将获取一个值数组.如果有帮助,我可以将该 ...

  5. SQL语句like子句中的转义符

    如果想在SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符.SQL里提供了 escape子句来处理这种情况,escape可 ...

  6. sql GROUP BY子句使用实例

    GROUP BY子句 GROUP BY子句可以将表的行划分为不同的组.分别总结每个组,这样就可以控制想要看见的详细信息的级别. 语法: [ GROUP BY [ ALL ] group_by_expr ...

  7. SQL之COLLATE 子句 排序规则

    COLLATE 是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则转换. 语法 COLLATE { <collation_name> | databa ...

  8. 一次PHP中SQL的Where子句无效问题的解决之旅

    文章目录 问题厘清 问题探索 应用的环境 代码分析 解决思路 总结 大概有五.六.七.八.九年没有使用PHP了, 这两天突然被一个跨站点的同仁问了一个PHP的问题,据描述这个问题已经折磨他三天了. 问 ...

  9. sql limit 子句_具有并行性SQL Server TOP子句性能问题

    sql limit 子句 TOP操作员基础 ( Basics of TOP Operator ) The TOP keyword in SQL Server is a non-ANSI standar ...

最新文章

  1. 2022-2028年中国HDPE膜行业市场研究及投资发展分析报告
  2. linux驱动模块makefile,linux驱动makefile求解
  3. dfs入门排列数字问题(一看就懂的讲解)
  4. SSH下的组合批量增加
  5. php读取文件和读取redis,本地测试读取redis和普通文件缓存的速度,redis慢一倍?...
  6. AcWing 253. 普通平衡树
  7. mysql学习笔记-insert扩展
  8. stm32F4驱动AD7793程序-ADC模拟前端-应用详解,应该是最全了
  9. Linux 命令(11)—— col 命令
  10. dram和nand哪个难生产_终于有人说清楚了什么是DRAM、什么是NAND Flash
  11. android 自定义地图标注,Android高德地图自定义Markers【原创】
  12. 漫画:从今天开始,我不再买书了!
  13. django 模型choice基本讲解
  14. python批量读取图片并复制入word_提取出 Word 文档里的图片  并利用 python 批量转换格式...
  15. python神经网络识别验证码_基于卷积神经网络实现验证码识别(一)
  16. 爬虫python创意_爬虫案例:利用python爬虫关键词批量下载高清大图
  17. WebStrom中一些有趣的工具与常用快捷键
  18. 海南率先成为新能源汽车新零售第一战场
  19. XDM、GDM和KDM
  20. 如何才能成为数字IC后端ECO专家?

热门文章

  1. 在局域网访问_管理Windows访问凭证,快速访问局域网上的共享资源
  2. 数据库审计服务器性能要求,数据库审计技术指标资质要求-.docx
  3. python免安装环境 linux_python如何打包脚本(库也一起打包),直接在linux环境运行,不需要安装库?...
  4. java SAX 防xml注入,如何防止XML注入像XML Bomb和XXE攻击
  5. Java class.forname 功能介绍
  6. 计算机上机报告-origin,Origin 8上机练习1
  7. HDU3072(Kosaraju算法)
  8. Codeforces Round #686 (Div. 3) F. Array Partition(二分+线段树)
  9. 点分治问题 ----------- 2019西安邀请赛 j and and and[点分治]
  10. szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法