rownum,rownumber(), rank(),dense_rank()都是用来为记录分配序号的,

rownum只能在orderby语句排完序后,在外层嵌套查询才能获得正确的行号,用起来相当复杂

select rownum, designator from airport_heliport_ts; --这样写是无效的

正因为这样,产生了row_number() over(order by ) 用法:

select row_number() over(order by designator),  designator from airport_heliport_ts ;

它的好处是用一级sql查询就能实现上面的 加行号功能。

rank(),dense_rank()的功能与之非常相似,区别是:

row_number()对重复的排序值分配不同的行号;

rank()对重复排序值分配相同的序号,且行号不连续;如前三个值重复,序号就是1,1,1,4

dense_rank()对重复排序值分配相同的序号,但行号连续;如前三个值重复,序号就是1,1,1,2

如果只需返回上述排序后的最大值或最小值,可用:(其中的first可换成last实现升、降序)

select max(designator) keep(dense_rank first order by designator)   from airport_heliport_ts t;

分组排序partition

前面的几种排序方法都只能整体排序,如果要按条件分组后再排序,就要用partition函数,如:

select row_number() over(partition by bureau_id order by bureau_id,designator), bureau_id,  designator from airport_heliport_ts t ;

实现按bureau_id分区后,在每个相同的bureau_id分区内排列序号,类似于group by函数,但查询结果不会分组

除了row_number()外,parttion还支持wm_concat等集合函数,能比wm_concat(distinct) +group by实现更灵活的排序方式

select wm_concat(designator) over(partition by t.bureau_id order by bureau_id,designator ), bureau_id,  designator from airport_heliport_ts t ;

select rownum, designator from airport_heliport_ts;
select row_number() over(order by designator),  designator from airport_heliport_ts ;
select rank()over(order by designator),  designator from airport_heliport_ts ;
select dense_rank()over(order by designator),  designator from airport_heliport_ts ;
select max(designator) keep(dense_rank first order by designator)   from airport_heliport_ts t;
select row_number() over(partition by t.bureau_id order by bureau_id,designator), bureau_id,  designator from airport_heliport_ts t ;
select wm_concat(designator) over(partition by t.bureau_id order by bureau_id,designator ), bureau_id,  designator from airport_heliport_ts t ;

rownum, row_number(), rank() , dense_rank(), partition by ,max() keep 语句的区别与用法的更多相关文章

  1. 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF

    1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...

  2. ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()

    ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()   今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...

  3. SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()

    >>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...

  4. Hive学习之路 (十四)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK

    概述 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. 注意: 序列函数不支持WINDOW子句.(ROWS BETWEEN) 数据 ...

  5. 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法

    回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...

  6. SQL Server中排名函数row_number,rank,dense_rank,ntile详解

    SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...

  7. 关于rank、dense_rank、ROW_NUMBER及OVER(PARTITION BY)、OVER(ORDER BY)的一些用法

    CREATE TABLE t_harry ( id int NOT NULL, ) DEFAULT NULL, ChannelID ) DEFAULT NULL, TimeStamp datetime ...

  8. sql server 学习笔记 ( row_number, rank, dense_rank over partition by order by )

    refer : https://blog.csdn.net/winer2008/article/details/4283539 https://www.cnblogs.com/linJie193090 ...

  9. SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()

    1 SELECT orderid,custid,val, ROW_NUMBER() OVER(ORDER BY val) AS rownum, RANK() OVER(ORDER BY val) AS ...

随机推荐

  1. python重要模块之subprocess模块

    python重要模块之subprocess模块 我们经常要通过python去执行系统的命令或者脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就相当于发起了一个新的进程, ...

  2. 【剑指offer】10A--求裴波那切数列的第n项,C++实现

    #本文是牛客网<剑指offer>刷题笔记 1.题目 写入一个函数,输入n,输出裴波那切数列的第n项 2.思路 递归--时间和空间复杂度高 循环--时间和空间复杂度低,通过循环迭代计算第n项 ...

  3. socket创建UDP服务端和客户端

    UDP服务端代码示例: from socket import * #1.创建数据报套接字 sockfd = socket(AF_INET, SOCK_DGRAM) #2.绑定服务端地 sockfd.b ...

  4. 正确的使用margin:0 auto与body{text-align:center;}实现元素居中(转)

    body{text-align:center}与margin:0 auto的异同? text-align是用于设置或对象中文本的对齐方式.一般情况下我们设置文本对齐方式的时候需要用此属性进行设置 我们 ...

  5. 用python验证蒙提霍尔问题

    最初看到这个问题是初中的时候买了一本有关数学谜题的书里面概率论的一张的课后拓展就是说到三门问题,当时作为一个扩展阅读看了一下,里面说到了一个世界智商最高的女人秒杀了美国一大群的数学高材生的精彩故事(比 ...

  6. erl_0019《硝烟中的erlang》 读书笔记005 “进程信息"

    对一个运行中的Erlang系统来说,进程绝对是重要的组成部分.正因为进程是所有运行实体的基础,因此会想去了解它们的更多信息.幸运的是,VM提供了大量的可用信息,其中有些可以安全使用,有些在生产环境中使 ...

  7. 用eclipse打包可执行的jar(含第三方jar包)

    在eclipse中的解决方式如下: 在工程目录下(与src同层)建立lib目录,将第三方Jar包放到这个目录里(copy,paste即可)[如果直接引用本地的jar,一旦换电脑就呵呵了...] 右击工 ...

  8. Dapper.Contrib 开发.net core程序,兼容多种数据库

    Dapper.Contrib 开发.net core程序,兼容多种数据库 https://www.cnblogs.com/wuhuacong/p/9952900.html 使用Dapper.Contr ...

  9. ubuntu中安装iso文件

    [font=微软雅黑]小施今天写一篇教程来教大家如何在Ubuntu中使用虚拟光驱. 在中使用是很简单的.可是很多新手却不会  前提:你所在的用户必须拥有root权限(终端中需要用到root权限).一个 ...

  10. CentOS 6.6下安装OpenOffice4.0

    最近由于项目需要,要在公司服务器上安装Openoffice,网上搜了一些资料后成功安装,现分享给大家. 1.首先先下载好需要的rpm包:Apache_OpenOffice_4.0.0_Linux_x8 ...