create table test2 as
select 1 id, 111 mc,1 sl from dual union all
select 1 , 222,6 from dual union all
select 1 , 333,2 from dual union all
select 1 , 555,3 from dual union all
select 1 , 666,3 from dual union all
select 2 , 111,1 from dual union all
select 2 , 222,1 from dual union all
select 2 , 333,2 from dual union all
select 2 , 555,2 from dual
select t.* ,
row_number() over (partition by id order by t.sl) row_num,
rank() over (partition by id order by t.sl) rank,
dense_rank() over (partition by id order by t.sl) denserank
from test2 t
ID MC SL ROW_NUM RANK DENSERANK
---------- ---------- ---------- ---------- ---------- ----------
1 111 1 1 1 1
1 333 2 2 2 2
1 666 3 3 3 3
1 555 3 4 3 3
1 222 6 5 5 4
2 111 1 1 1 1
2 222 1 2 1 1
2 555 2 3 3 2
2 333 2 4 3 2
可知:
dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从+重复行数开始递增,而row_number则不管是否有重复行,(分组内)序列值始终递增
keep(dense_rank first/last order by )
select id,mc,sl,
2 min(mc) keep(dense_rank first order by sl) over(partition by id) min_mc,
3 min(mc) keep(dense_rank last order by sl) over(partition by id) min_mc
4 from test2;
ID MC SL MIN_MC MIN_MC
---------- ---------- ---------- ---------- ----------
1 111 1 111 222
1 222 6 111 222
1 333 2 111 222
1 555 3 111 222
1 666 3 111 222
2 111 1 111 333
2 222 1 111 333
2 333 2 111 333
2 555 2 111 333
9 rows selected
转自:
http://blog.163.com/dykj_dxj/blog/static/2549252520108271158241/
发表评论
-
ORACLE 两个表或两个结果集的数据对比常用的函数
2017-04-19 15:13 1051假设有两个表A,B,都只有一个字段PHONE 1、MIN ... -
Oracle删除重复数据,并只保留一条记录
2016-07-16 13:09 29421、查找表中多余的重复记录,重复记录是根据单个字段(Id)来 ... -
客户端连接虚拟机Oracle服务器错误
2016-01-14 00:51 14291.在虚拟机上安装Oracle ... -
ETL -- ORACLE -- CDC技术
2015-09-22 14:08 1707ETL: Extract(抽取) ... -
影子数据库
2015-09-18 12:31 4924什么是数据库中的影子文件? A shadow file ... -
ETL的一些概念
2015-09-17 16:57 1792一、Analysis - 分析:1. ... -
JAVA createSQLQuery().list()返回日期格式没有时分秒的解决方法
2015-01-21 14:50 1936在开发web项目中,发现提取Oracle中某 ... -
Oarcle中oracleHomeKey处理方法
2014-11-24 18:57 0Oarcle中oracleHomeKey处理方法 出现O ... -
oracle创建表空间
2014-10-24 14:15 613/*分为四步 *//*第1步:创建临时表空间 */cre ... -
Oracle中针对中文进行排序
2013-09-13 09:15 890在oracle 9i之前,对中文的排序,是默认按2 ... -
Oracle over函数
2013-04-11 09:19 744sql over的作用及用法:rank ( ) over ( ... -
oracle 层次查询判断叶子和根节点
2012-12-24 16:23 4333oracle 9i判断是叶子或根节点,是比较麻烦的一件事情,S ... -
oracle wm_concat(column)函数的使用
2012-07-06 14:05 834oracle wm_concat(column)函数使我们经常 ... -
Oracle 循环插入测试数据
2012-03-28 16:10 1697declare maxrecords consta ... -
Oracle Rownum用法详解
2012-03-27 10:30 808对于rownum来说它是oracle系统顺序分配为从查询返回的 ... -
查看oracle当前连接数
2012-03-07 09:12 850怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查 ... -
oracle中的exists 和not exists 用法详解
2012-03-06 17:31 905有两个简单例子,以说明 “exists”和“in”的效率问 ... -
Oracle创建表空间、用户、导入导出命令
2012-03-05 10:46 0//创建临时表空间 create temporary tabl ... -
Oracle删除表中重复数据
2011-11-02 17:13 1173我们可能会出现这种情 ... -
ORACLE递归查询
2011-03-04 14:03 1375一、建表 CREATE TABLE TB_GROUP( ...
相关推荐
ROW_NUMBER、RANK、DENSE_RANK 和 NTILE 排名函数 MS SQL 2005 中的排名函数包括 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE,这四个函数可以有效地分析数据并提供排序值。下面将详细介绍每个函数的用法和示例。 一、...
还是以上述为例,当field1字段值相同时,dense_rank函数会连续分配序号,即后三条记录的序号分别为1、1、1,而第4条记录的序号将是2,保持序号的连续性,后面的记录依然依次递增。SQL语句如下: ```sql select ...
`ROW_NUMBER()`可以与`RANK()`和`DENSE_RANK()`进行比较。这些函数都可以用来给数据排序并分配等级,但是它们在处理并列的情况时有所不同: - **Rank**:如果两个或多个行具有相同的排序值,则这些行都将获得相同...
### 分析函数ROW_NUMBER、RANK、DENSE_RANK的用法 #### 一、ROW_NUMBER()函数 **ROW_NUMBER()** 函数是SQL Server 2005引入的一个新的窗口函数,它为每一行返回一个唯一的整数值。该函数特别适用于需要对查询结果...
`rank()`和`dense_rank()`函数是`row_number()`的两个变体: - **rank()**:类似`row_number()`,但它在遇到相等的排序值时会产生跳跃。也就是说,如果有两个行在排序列上有相同的值,它们都会被赋予相同的排名,接...
在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...
Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...
在SQL Server 2005中,`ROW_NUMBER()`、`RANK()`和`DENSE_RANK()`是三种常用的排名函数,它们在处理大数据集时非常有用,尤其在数据分析和报表生成方面。这些函数都可以帮助我们根据指定的条件对数据进行排序并赋予...
本文主要讲解SQL中的四大排名函数:ROW_NUMBER、RANK、DENSE_RANK以及NTILE,它们在数据分析和报表生成中起到关键作用。 1. ROW_NUMBER() ROW_NUMBER()函数用于为查询结果集中的每一行分配一个唯一的数字序列。这个...
此外,`ROW_NUMBER()`函数还有其他窗口函数,如`RANK()`和`DENSE_RANK()`,它们在某些场景下可能会提供更灵活的解决方案。但在这里,我们主要关注`ROW_NUMBER()`在分页中的应用。 总结起来,`ROW_NUMBER()`函数在...
SQL Server 2005 中提供了四个排名函数,分别是 row_number、rank、dense_rank 和 ntile。这四个函数的主要功能是为查询结果生成一个序号,用于实现查询指定范围的记录或实现分页功能。 一、row_number 函数 row_...
“rank()、dense_rank()和row_number()的区别”文章的date
OVER函数通常与窗口函数(如RANK(), DENSE_RANK(), ROW_NUMBER(), SUM(), AVG()等)一起使用。其基本语法形式如下: ```sql <window_function> OVER ( [window_spec] ) ``` 其中`<window_function>`代表具体的窗口...
`row_number()`, `rank()`, 和 `dense_rank()` 是三个重要的窗口函数,用于为查询结果集中的每一行分配唯一的序列号,常用于分组、排名或者实现分区排序。下面我们将详细探讨这三个函数的区别和用法。 1. `row_...
ROW_NUMBER()、RANK()和DENSE_RANK()是其中的三个关键函数,它们都用于对数据进行排序并分配唯一的序列号,但各有其特点和适用场景。以下是对这三个函数的详细解释: 1. ROW_NUMBER() ROW_NUMBER()函数为每一行提供...