Erik.Xue 发表于 2020-11-5 16:35:21

帮你打开活字格更神奇的功能:八十九,内置视图支持ROW_NUMBER() OVER()

本帖最后由 Erik.Xue 于 2020-11-5 16:40 编辑

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

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值分配给分区中的行的顺序。

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

在活字格中咱们新建这么一个表格:


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


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

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


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




页: [1]
查看完整版本: 帮你打开活字格更神奇的功能:八十九,内置视图支持ROW_NUMBER() OVER()