rownum, row_number(), rank() , dense_rank(), partition by ,max() keep 语句的区别与用法
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 语句的区别与用法的更多相关文章
- 大数据学习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 ...
- ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over() 今天女票问我SqlServer的四种排序,当场写了几句Sql让她了解,现把相关Sql放上来. 首先, ...
- SQL Server - 四种排序, ROW_NUMBER() /RANK() /DENSE_RANK() /ntile() over()
>>>>英文版 (更简洁易懂)<<<< 转载自:https://dzone.com/articles/difference-between-rownum ...
- Hive学习之路 (十四)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
概述 本文中介绍前几个序列函数,NTILE,ROW_NUMBER,RANK,DENSE_RANK,下面会一一解释各自的用途. 注意: 序列函数不支持WINDOW子句.(ROWS BETWEEN) 数据 ...
- 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法
回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...
- SQL Server中排名函数row_number,rank,dense_rank,ntile详解
SQL Server中排名函数row_number,rank,dense_rank,ntile详解 从SQL SERVER2005开始,SQL SERVER新增了四个排名函数,分别如下:1.row_n ...
- 关于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 ...
- 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 ...
- 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 ...
随机推荐
- openssl编译出错解决
tar -jxvf trafficserver-3.0.2.tar.bz2 ./configure --prefix=/usr/install/trafficserver --with-user=ca ...
- Licp - 一个玩具解释器的实现
纸上得来终觉浅,绝知此事要躬行. 最近看了 SICP,其第四章讲述了一个简单的 Scheme 解释器的实现.粗看了一遍后决定自己用 C 语言实现一个残疾的 Scheme 解释器,想来这样的学习效果应该 ...
- 复选框checkbox样式修改
该方法只兼容IE9及以上 将checkbox和label关联起来, 将checkbox隐藏掉,通过点击label来点击checkbox,label的样式即可自定义. 通过checkbox:checke ...
- BZOJ3673 可持久化并查集 by zky 【主席树】
BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...
- BZOJ1407 NOI2002 Savage 【Exgcd】
BZOJ1407 NOI2002 Savage Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...
- bat实现创建、复制、删除文件及文件夹
1 建bat文件自动执行复制,删除命令. 例1:以下是复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:下面一 ...
- 使用distillery 构建专业的 phoenix 项目软件包
备注: 首先需要安装 elixir 环境 1. 基本项目说明 参考项目: https://github.com/rongfengliang/phoenix-rest-demo 2. 项目说 ...
- 在window上使用eclipse对hadoop进行编程
步骤: 1.下载hadoop-eclipse-plugin-1.2.1.jar 2.把 hadoop-eclipse-plugin-1.2.1.jar"放到Eclipse的目录的" ...
- 在Centos中yum安装和卸载软件的使用方法(转)
在Centos中yum安装和卸载软件的使用方法 安装方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软 ...
- zk中文乱码问题
之前讲了怎么把数据导入到zookeeper(见zookeeper事件监听的importData方法),虽然本机win10的zookeeper展示没问题,但到了linux上就出现乱码了: << ...