本文分享自华为云社区《row_number函数的不稳定性》,作者: nullptr_ 。

row_number为窗口函数,用来为各组内数据生成连续排号

基础用法

postgres=# select id,name,age,row_number() over() from test;
id | name | age | row_number
----+------+-----+------------
2 | 张三 | 13 | 1
3 | 张四 | 16 | 2
3 | 张三 | 14 | 3
1 | 张三 | 12 | 4
3 | 张四 | 15 | 5
(5 rows)
postgres=# select id,name,age,row_number() over(order by age) from test;
id | name | age | row_number
----+------+-----+------------
3 | 张四 | 16 | 5
3 | 张三 | 14 | 3
3 | 张四 | 15 | 4
1 | 张三 | 12 | 1
2 | 张三 | 13 | 2
(5 rows)
postgres=# select id,name,age,row_number() over(partition by name order by age) from test;
id | name | age | row_number
----+------+-----+------------
1 | 张三 | 12 | 1
2 | 张三 | 13 | 2
3 | 张三 | 14 | 3
3 | 张四 | 15 | 1
3 | 张四 | 16 | 2
(5 rows)

特殊用法

postgres=# select * from test1 where id in (1,2,4);
id | info
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 | 张三,12;张三,13;张三,14
1 | 张四,13;张四,16;张四,17
4 | 张十一,14;张十一,13;张十一,16;张十一,146;张十一,136;张十一,166;张十一,46;张十一,36;张十一,66;张十一,246;张十一,236;张十一,26;张十一,36;张十一,76;张十一,17;张十一,13;张十一,15;张十一,19;张十一,10;张十一,6;张十一,966
(3 rows)

需求:将表中info字段转成行,并按照存储顺序生成组内序号。

将字段info 通过函数regexp_split_to_table用分号作为分隔符转成行,通过split_part将各行分段输出

postgres=#  select split_part(c.a,',',1) as name, split_part(c.a,',',2) as age from (select regexp_split_to_table(info,';') as a  from test1 where id in (1,2,4)) c;
name | age
--------+-----
张十一 | 14
张十一 | 13
张十一 | 16
张十一 | 146
张十一 | 136
张十一 | 166
张十一 | 46
张十一 | 36
张十一 | 66
张十一 | 246
张十一 | 236
张十一 | 26
张十一 | 36
张十一 | 76
张十一 | 17
张十一 | 13
张十一 | 15
张十一 | 19
张十一 | 10
张十一 | 6
张十一 | 966
张四 | 13
张四 | 16
张四 | 17
张三 | 12
张三 | 13
张三 | 14
(27 rows)

增加组内行号

postgres=# select split_part(c.a,',',1) as name, split_part(c.a,',',2) as age,row_number() over (partition by name)  from (select regexp_split_to_table(info,';') as a  from test1 where id in (1,2,4)) c;
name | age | row_number
--------+-----+------------
张三 | 12 | 1
张三 | 13 | 2
张三 | 14 | 3
张十一 | 966 | 1
张十一 | 19 | 2
张十一 | 10 | 3
张十一 | 6 | 4
张十一 | 14 | 5
张十一 | 13 | 6
张十一 | 16 | 7
张十一 | 146 | 8
张十一 | 136 | 9
张十一 | 166 | 10
张十一 | 46 | 11
张十一 | 36 | 12
张十一 | 66 | 13
张十一 | 246 | 14
张十一 | 236 | 15
张十一 | 26 | 16
张十一 | 36 | 17
张十一 | 76 | 18
张十一 | 17 | 19
张十一 | 13 | 20
张十一 | 15 | 21
张四 | 16 | 1
张四 | 17 | 2
张四 | 13 | 3
(27 rows)

可见行号并非按照存储顺序进行赋值,使用sequence进行优化可实现相关需求

postgres=# create sequence test_seq;
CREATE SEQUENCE
postgres=# select split_part(c.a,',',1) as name, split_part(c.a,',',2) as age,row_number() over (partition by name order by c.line) from (select nextval('test_seq') as line, regexp_split_to_table(info,';') as a from test1 where id in (1,2,4)) c;
name | age | row_number
--------+-----+------------
张三 | 12 | 1
张三 | 13 | 2
张三 | 14 | 3
张十一 | 14 | 1
张十一 | 13 | 2
张十一 | 16 | 3
张十一 | 146 | 4
张十一 | 136 | 5
张十一 | 166 | 6
张十一 | 46 | 7
张十一 | 36 | 8
张十一 | 66 | 9
张十一 | 246 | 10
张十一 | 236 | 11
张十一 | 26 | 12
张十一 | 36 | 13
张十一 | 76 | 14
张十一 | 17 | 15
张十一 | 13 | 16
张十一 | 15 | 17
张十一 | 19 | 18
张十一 | 10 | 19
张十一 | 6 | 20
张十一 | 966 | 21
张四 | 13 | 1
张四 | 16 | 2
张四 | 17 | 3
(27 rows)

总结

row_number的排序是不稳定的,所以不会按照初始顺序进行输出,需要人为给定顺序。

号外!

华为将于2023年9月20-22日,在上海世博展览馆和上海世博中心举办第八届华为全联接大会(HUAWEICONNECT 2023)。本次大会以“加速行业智能化”为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从商业、产业、生态等方面探讨如何加速行业智能化。

我们诚邀您莅临现场,分享智能化的机遇和挑战,共商智能化的关键举措,体验智能化技术的创新和应用。您可以:

  • 在100+场主题演讲、峰会、论坛中,碰撞加速行业智能化的观点
  • 参观17000平米展区,近距离感受智能化技术在行业中的创新和应用
  • 与技术专家面对面交流,了解最新的解决方案、开发工具并动手实践
  • 与客户和伙伴共寻商机

感谢您一如既往的支持和信赖,我们热忱期待与您在上海见面。

大会官网:https://www.huawei.com/cn/events/huaweiconnect

欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。

点击关注,第一时间了解华为云新鲜技术~

row_number函数的不稳定性的更多相关文章

  1. ROW_NUMBER()函数的使用

    SQL Server数据库ROW_NUMBER()函数的使用是本文我们要介绍的内容,接下来我们就通过几个实例来一一介绍ROW_NUMBER()函数的使用. 实例如下: .使用row_number()函 ...

  2. SQL Server数据库ROW_NUMBER()函数使用详解

    SQL Server数据库ROW_NUMBER()函数使用详解 摘自:http://database.51cto.com/art/201108/283399.htm SQL Server数据库ROW_ ...

  3. Teradata 的rank() 和 row_number() 函数

    Teradata数据库中也有和oracle类似的分析函数,功能基本一样.示例如下: RANK() 函数   SELECT * FROM salestbl ORDER BY 1,2; storeid p ...

  4. T-SQL利用Row_Number函数实现分页

    SQL: CREATE PROCEDURE PagingViewTest ( @currentPageIndex INT, --页序号 @pageSize INT, --页大小 @pageCount ...

  5. 【ROW_NUMBER 函数(Transact-SQL)】

    [ROW_NUMBER 函数(Transact-SQL)]返回结果集分区内行的序列号,每个分区的第一行从 1 开始. 注释: ROW_NUMBER() OVER (PARTITION BY COL1 ...

  6. 按某个字段来分组、编号的row_number()函数

    本文参考 http://zhidao.baidu.com/link?url=8su4F16Et8Q0S3FmybwniJSI51Ms0AeVujcEXhyEaZh3u5LlOng5Xri_9zHsl7 ...

  7. [转]SQL2005后的ROW_NUMBER()函数的应用

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  8. 【转载】Sqlserver数据库中无自增Id的情况下使用ROW_NUMBER()函数进行数据分页

    在Sqlserver数据库中,如果查询表中含有自增长Id列,一般会采用select Top的方式来数据的分页操作.而实际上很多数据表设计的时候,不一定含有自增长Id列,那么数据库没有Id自增列的时候要 ...

  9. MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据

    转自:http://www.maomao365.com/?p=4942 下文主要讲述:重复数据只获取一条的方法 row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号,我们常常 ...

  10. hive的row_number()函数

    hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...

随机推荐

  1. Full Tank 题解

    Full Tank 题目大意 给定一张 \(n\) 个点,\(m\) 条边的连通无向图,在每个点有一个加油站,油价为该点的点权,每条边的油耗为该边的边权.现给出若干询问,问一辆油箱容量为 \(c\) ...

  2. C# ref, in, out关键字

    写在前面:大内老A的这篇"老生常谈:值类型VS引用类型"放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in ...

  3. 如何使用markdown

    关于如何使用markdown写博客 markdown的语法 代码的插入 电脑Table建上面上面的键输入三个点``` 然后输入语言+回车 c语言中第一个程序 #include<stdio.h&g ...

  4. SpringBoot+Redis实现接口级别缓存信息

    本文主要讲述如何通过SpringBoot+Redis实现接口级别缓存信息 背景 近期因为一直在处理公司的老项目,恰好碰到产品说页面有一些信息展示慢,简单看了一下页面接口,发现查询的是系统中几张大表(数 ...

  5. 树莓派4b部署samba服务实现文件共享

    注意 samba 生命力很旺盛,软件是在不断更新的, 网上很多针对 samba 网速优化设置截止当前 实测发现有很多已经过期, 甚至有些设置会适得其反,使传输速度更低. 例如, 全网都在配置的参数,& ...

  6. Codeforces Global Round 13 A-D题题解

    写在前边 链接:Codeforces Global Round 13 \(A,B,C,D\) A. K-th Largest Value 链接:A题链接 题目大意: 有一个字串只由\(0.1\)组成, ...

  7. 初窥门径,从大模型到内容生成看AI新次元

    视频云AI进化新纪元. 最近Gartner发布2024年十大战略技术趋势,AI显然成为其背后共同的主题.全民化的生成式人工智能.AI增强开发.智能应用......我们正在进入一个AI新纪元. 从Cha ...

  8. 海康单筒红外相机SDK调用方法

    目录 配置环境 1.准备文件 2.配置 3.路径 程序 1.错误警告 2.导入头文件: 3.修改SDK 配置环境 1.准备文件 通过VS创建空白项目后,将海康SDK文件夹: CH-HCNetSDKV6 ...

  9. vue常用方法封装收集

    // 格式化时间 export function formateTime(date) { var y = date.getFullYear(); var m = date.getMonth() + 1 ...

  10. C#/.NET/.NET Core推荐学习书籍(已分类)

    前言 古人云:"书中自有黄金屋,书中自有颜如玉",说明了书籍的重要性.作为程序员,我们需要不断学习以提升自己的核心竞争力.以下是一些优秀的C#/.NET/.NET Core相关学习 ...