工作中要常对数据进行分析,分析前要对原始数据中找到想要的格式,数据原本存储的格式不一定时我们想要的,要在基础上进行一定的处理,下面介绍的几种方式是常用的数据排序的集中方式,包含 排名函数(row_number())、排序函数(rank(),dense_rank())、聚合函数(常用统计函数)、偏移函数(lag(),lead(),first_value(),last_value())等内容
数据源为上篇文章的最后添加样本数据,上篇文章的最后用到的几个窗口函数会在这篇文章中详细介绍
Row_Number() :将数据行根据一定的规则进行排名,排列出1,2,3,4···的形式,此函数后必须跟,且必须指定排名列,以形式,此排列顺序一定是连续的,也可以添加分区,在不指定分区 时默认在查询条件内排序,指定分区后在分区内排名
- 查找出所有用户最近一次的账单记录
- 每个账号最近五次的消费记录
显然根据上面的查询方法只需要修改 最后查询后的
- 每个账号消费最多的五条记录
首先要根据 进行分区,然后根据 排序, 最后根据排序值 取出
修改如下
一般情况下相比于其他的窗口函数 row_number() 的使用率是最高的,使用场景页多种多样
比如:在SQL Server 2012之前没引入 offset / fetch时我们经常用它来进行分页工作,进行修改序列操作生成操作
例如上文中 虚拟表函数编写,和修改订单号让数据化
- 分页: 一般界面展示减少数据库访问压力,会每次返回一定量的数据
排序函数 和排名函数用法类似,生成结果上有所差异
rank() 非连续 如果排序列值不唯一时出现相同值,且下值会出现跳跃现象;排序列值唯一是效果与函数一致
dense_rank() 连续排列,当列值不唯一时出现相同值,下值和上值会城现连续现象
rank()
dense_rank()
聚合函数
分区内逐条查找,遇见之后更新,
偏移函数
Lag() 前一条,未找到为null
Lead() 后一条,未找到默认null,可指定偏移量,和默认值
一个参数效果
可以看出偏移量,默认为1行,且未找到值为 null
两个参数偏移函数,第一个参数偏移列,二个参数偏移行
指定默认值,将列默认值设置为
first_value() 分区内第一个值
last_value() 分区内左后一个值
行变列方便操作
下面语句为查找出用户流水最大的五条记录编号,并变为列的形式
将上表中消费编号拼接为一列形式输出