找回密码
 立即注册

QQ登录

只需一步,快速开始

Erik.Xue 讲师达人认证 悬赏达人认证 活字格认证 Wyn认证
超级版主   /  发表于:2020-11-5 16:35  /   查看:3207  /  回复:0
本帖最后由 Erik.Xue 于 2020-11-5 16:40 编辑

众所周知,SQL语句是个非常神奇且好用的“编程语言”,学会了它,再使用活字格那可谓画龙点睛,点石成金,锦上添花,如何添翼啊~~~ timg.gif

ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时 应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号。
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定,那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用。

简单点儿:
ROW_NUMBER()返回结果集分区内行的序列号,每个分区的第一行从1开始计。

语法:ROW_NUMBER() OVER([<partition by clause1>] order by clause2)

备注:order by子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。

参数:<partition by clause1>:将FROM子句生成的结果集划入应用了ROW_NUMBER函数的分区。
             order by clause2:确定将ROW_NUMBER值分配给分区中的行的顺序。

说了这么多的概念性知识,废话不多说,咱们写几个看看就清楚了。

在活字格中咱们新建这么一个表格:
image.png413607482.png

比如,我想要根据员工表的数据,按照部门对工资进行一个排序,那么就可以使用ROW_NUMBER来实现了。
  1. SELECT *,ROW_NUMBER() OVER(partition by "部门" order by "工资") as aaa FROM "Sheet1";
复制代码
使用以上的SQL语句,就会有以下图的效果:
image.png215534972.png

可以看出,表格数据已经按照部分进行了分组,工资从高到低进行了排序。

再来试一下,我们按照性别对工资进行一个排序,那么就继续:
  1. SELECT *,ROW_NUMBER() OVER(partition by "性别" order by "工资") as aaa FROM "Sheet1";
复制代码
效果如图:
image.png962053222.png

是不是可以看出,其实partition by就是想按照哪一列进行分组或者归类,order by就是按照同一类中的数据进行排序。我们的OW_NUMBER这一列就是排序的顺序数。是不是很简单易用呢?
image.png317320555.png



row_number.fgcc

53.41 KB, 下载次数: 108

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部