--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
分享到:
相关推荐
在这个示例中,`myudfs.jar` 是包含上述 UDF 实现的 jar 文件,`urldecode` 解码 URL 字符串,`ROW_NUMBER` 给每行分配序列号,而 `TOMAP` 将其他字段转换为 Map 类型。 通过理解并正确使用这些自定义 UDF,你可以...
根据提供的信息,本文将详细介绍一个在SQL Server 2000环境下用于字符串拼接的自定义函数,并对该函数的功能、实现方法以及应用场景进行深入解析。 ### 一、SQL Server 2000简介 SQL Server 2000是微软发布的一款...
字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c#
Oracle 中分组后拼接分组字符串 本文主要介绍了在 Oracle 中如何对分组后的数据进行拼接操作,生成分组字符串。下面将对这个问题进行详细的分析和解释。 首先,我们需要创建一个测试表,并插入一些测试数据。这个...
通常,我们利用`row_number()`进行数据分页,但这里我们将讨论如何利用这个函数来删除表中的重复记录。删除重复记录是一个常见的数据库维护任务,尤其是当数据导入或同步过程中出现了重复数据时。 首先,让我们创建...
时间字符串转换为time_t精确到秒stringToSeconds。自己编写的。
在这个“character_changed_to_number.rar_字符串转数字”项目中,我们看到的是一个LabVIEW程序,其主要功能就是将输入的字符串转换为相应的数字。 在LabVIEW中,数据类型分为两大类:基本数据类型和复合数据类型。...
总结来说,Oracle提供了多种方式来实现字符串到数字的转换,包括`TO_NUMBER()`、`TRY_TO_NUMBER()`以及配合正则表达式的使用。理解并熟练运用这些函数可以帮助我们在处理含有数字的字符串时,更好地进行数据分析和...
标题:按某字段合并字符串之一(简单合并) ...即:group by id, 求 value 的和(字符串相加) 1、sql2000中只能用自定义的函数解决 create table tb(id int, value varchar(10)) insert into tb values(1,
在LabVIEW编程环境中,二进制字符串转换为十进制数值是常见的操作,尤其是在处理数据或进行计算时。本文将详细讲解如何利用LabVIEW实现这一转换,并探讨相关知识点。 首先,我们要理解二进制和十进制之间的基本概念...
Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接分组字符串是一种常见的操作,用于将分组后的多条记录的某字段进行拼接。下面我们来详细介绍如何实现这种操作。 首先,创建一个测试表 `test`,该表包含三...
在这个名为"VS2008 字符串相加源代码"的项目中,我们聚焦于如何在Visual Studio 2008环境下,通过C#语言实现两个字符串的相加操作。这个功能在用户界面中可能表现为两个文本框(TextBox)的输入值合并,适用于例如...
1. **字符串操作**:LabVIEW提供了多种字符串函数,如`String Concatenate`(连接字符串)、`String Split`(分割字符串)、`Find Substring`(查找子字符串)、`Replace Substring`(替换子字符串)等。这些函数...
mysql解析Json字符串插件 安装方法 1、拷贝lib_mysqludf_json_parsing.dll到mysql目录C:\Program Files\MariaDB 5.5\lib\plugin下 2、在数据库中执行 DROP FUNCTION json_get; CREATE FUNCTION json_get RETURNS ...
TO_NUMBER(char[,’format_model’]) 字符转换到数字类型 TO_DATE(char[,’format_model’]) 字符转换到日期类型 格式说明符:要与前边要转换的字符串的格式要相同才能转换(匹配问题:格式和位数)。 TO_CHAR...
在本文中,我们将深入探讨如何使用C语言实现超长整数字符串的相加操作。超长整数是指那些超过了标准整型(如int、long long)所能表示范围的整数,通常出现在大数运算或者加密算法中。由于C语言本身并不支持这样的...
在本案例中,我们讨论的是如何通过VB调用由VC++编写的DLL(动态链接库)来实现两个字符串的连接,即相加操作。DLL是一种可重用的代码库,它允许多个应用程序共享同一段代码,从而减少内存占用和提高执行效率。 首先...
总结,字符串转ASCII和ASCII转字符串是编程中常见的操作,主要涉及对字符和其对应的数字表示之间的转换。理解这些概念和实现方式对于理解和处理字符数据至关重要。通过学习不同编程语言中的相关函数和方法,你可以...
数字字符串转BCD码,BCD码转字符串C函数,定义好的函数下载即可使用无需更改。
本主题将深入探讨如何通过字符串实现大数相加,这是一种常见的大数处理方法。 一、大数相加的背景与需求 在日常编程中,我们通常使用诸如int、long等基本数据类型来存储和操作数字。然而,当需要处理的数字非常大...