--1.准备工作
create table TEST
(
id VARCHAR2(10),
mc VARCHAR2(50)
);
insert into test (ID, MC) values ('2', '11111');
insert into test (ID, MC) values ('2', '22222');
insert into test (ID, MC) values ('3', '22222');
insert into test (ID, MC) values ('3', '11111');
insert into test (ID, MC) values ('3', '33333');
insert into test (ID, MC) values ('1', '11111');
insert into test (ID, MC) values ('1', '22222');
--2.
--row_number() over ([partition by col1] order by col2) ) as 别名
--表示根据col1分组,在分组内部根据 col2排序
--而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
select id, mc,
row_number() over(partition by id order by mc) rn_by_id,
row_number() over(order by id) + id rn
from test;
with tbl as
(select id, mc,
row_number() over(partition by id order by mc) rn_by_id,
row_number() over(order by id) + id rn
from test
)
select id, ltrim(max(sys_connect_by_path(mc,'/')),'/')
from tbl
start with rn_by_id = 1
connect by prior rn = rn -1
group by id
order by id
;
--3.如果id存的不是数字,而是随意的字符串怎么办
with tbl as
(select id, mc,
row_number() over(partition by id order by mc) rn_by_id,
row_number() over(order by id) + dense_rank() over(order by id) rn
from test
)
select id, ltrim(max(sys_connect_by_path(mc,'/')),'/')
from tbl
start with rn_by_id = 1
connect by prior rn = rn -1
group by id
order by id
;
--也就是将id替换为dense_rank() over(order by id)
--4.执行下面sql,助于理解。注意sql1与sql2结果的不同
--sql1
select id, mc,
row_number() over(partition by id order by mc) rn_by_id,
row_number() over(order by id) + dense_rank() over(order by id) rn
from test;
--sql2
select id, mc,
row_number() over(partition by id order by id) rn_by_id,
row_number() over(order by id) + dense_rank() over(order by id) rn
from test;
--sql3
select id, mc,
row_number() over(order by id) rn,
dense_rank() over(order by id) dr,
rank() over(order by id) rk,
row_number() over(partition by id order by id) rn_by_id,
dense_rank() over(partition by id order by id) dr_by_id,
rank() over(partition by id order by id) rk_by_id,
row_number() over(partition by id order by mc) rn_by_mc,
dense_rank() over(partition by id order by mc) dr_by_mc,
rank() over(partition by id order by mc) rk_by_mc
from test;
--5.总结
row_number()涵数则是按照顺序依次使用,相当于我们普通查询里的rownum值;
rank()函数主要用于排序,并给出序号;
dense_rank()功能同rank()一样,区别在于,rank()对于排序并的数据给予相同序号,接下来的数据序号直接跳中跃,dense_rank()则不是,比如数据:
1,2,2,4,5,6 这是rank()的形式
1,2,2,3,4,5 这是dense_rank()的形式
1,2,3,4,5,6 这是row_number()涵数形式
------------------------------------------------------------------------------------------
补充:还有 MIN (ROWID) OVER (PARTITION BY col)
select id, mc,
MIN (ROWID) OVER (PARTITION BY id) id0,
row_number() over(partition by id order by mc) id1,
row_number() over(order by id) id2,
dense_rank() over(order by id) id3
from test
分享到:
相关推荐
我们都知道在linux下是没有itoa函数的,而又不能通过sprintf实现int转二进制字符串的方式,因此手动编写此代码段,希望可以对大家有帮助。
柔性字符串匹配____中文阴影版PDF!
串口接收字符串控制LED。通过STM32 串口1 接收字符串实现LED控制,程序通过判断\n识别字符串是否发送完成,所以串口调试助手上需勾选发送新行,发送LED1+ON点亮LED1,发送LED1+OFF关闭LED1
C语言浮点数转字符串
023.Python字符串_转义字符_字符串拼接_字符串复制_input()获得键盘输入.mp4
通过LabVIEW编程实现十六进制字符串向普通字符串转化。
C#_数据库连接字符串集合(Sql_验证Windows_身份验证)
SqlServer2000,用语数据库字符串相加的一个函数 用于字符串相加,字符串拼接
字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c#
02_字符串
16进制字符串转成普通字符串 ~~~~~超级好用
027.Python字符串_驻留机制_内存分析_字符串同一判断_值相等判断.mp4
时间字符串转换为time_t精确到秒stringToSeconds。自己编写的。
C++字符串操作的基本指南,新手必读
数据结构中字符串的相关操作,字符串连接,字符串比较,取字符串长度,删除子串,字符串替换,定位子串及取子串操作(这些操作用函数来实现)。并演示相关操作。
FindStr_搜索包含字符串的文件;_搜索文件_搜索字符串_源码
ASCII转换成十六进制字符串和二进制字符串显示
根据MSP430F55xx例程改编的文件,可以通过串口发送字符sendChar()或者字符串sendString();为了方便调试,增加了LED亮灭查看串口发送状态。
TO_NUMBER(char[,’format_model’]) 字符转换到数字类型 TO_DATE(char[,’format_model’]) 字符转换到日期类型 格式说明符:要与前边要转换的字符串的格式要相同才能转换(匹配问题:格式和位数)。 TO_CHAR...
倒置字符串,选择排序法,交互界面良好,可根据用户输入而输出结果