`

oracle row_number() over ,rank() over ,dense_rank() over ,keep 函数比较

 
阅读更多

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/

分享到:
评论

相关推荐

    ROW_NUMBER、RANK、DENSE_RANK 和 NTILE

    ROW_NUMBER、RANK、DENSE_RANK 和 NTILE 排名函数 MS SQL 2005 中的排名函数包括 ROW_NUMBER、RANK、DENSE_RANK 和 NTILE,这四个函数可以有效地分析数据并提供排序值。下面将详细介绍每个函数的用法和示例。 一、...

    SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较

    还是以上述为例,当field1字段值相同时,dense_rank函数会连续分配序号,即后三条记录的序号分别为1、1、1,而第4条记录的序号将是2,保持序号的连续性,后面的记录依然依次递增。SQL语句如下: ```sql select ...

    oracle row_number用法

    `ROW_NUMBER()`可以与`RANK()`和`DENSE_RANK()`进行比较。这些函数都可以用来给数据排序并分配等级,但是它们在处理并列的情况时有所不同: - **Rank**:如果两个或多个行具有相同的排序值,则这些行都将获得相同...

    分析函数ROW_NUMBER、RANK、DENSE_RANK的用法

    ### 分析函数ROW_NUMBER、RANK、DENSE_RANK的用法 #### 一、ROW_NUMBER()函数 **ROW_NUMBER()** 函数是SQL Server 2005引入的一个新的窗口函数,它为每一行返回一个唯一的整数值。该函数特别适用于需要对查询结果...

    深入探讨:oracle中row_number() over()分析函数用法

    `rank()`和`dense_rank()`函数是`row_number()`的两个变体: - **rank()**:类似`row_number()`,但它在遇到相等的排序值时会产生跳跃。也就是说,如果有两个行在排序列上有相同的值,它们都会被赋予相同的排名,接...

    Hive中分组取topN_row_number-rank和dense_rank的使用.pdf

    在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...

    Oracle开发之分析函数(Rank, Dense_rank, row_number)

    Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...

    SQLSERVER 2005的ROW_NUMBER、RANK、DENSE_RANK的用法

    在SQL Server 2005中,`ROW_NUMBER()`、`RANK()`和`DENSE_RANK()`是三种常用的排名函数,它们在处理大数据集时非常有用,尤其在数据分析和报表生成方面。这些函数都可以帮助我们根据指定的条件对数据进行排序并赋予...

    sql四大排名函数之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介绍

    本文主要讲解SQL中的四大排名函数:ROW_NUMBER、RANK、DENSE_RANK以及NTILE,它们在数据分析和报表生成中起到关键作用。 1. ROW_NUMBER() ROW_NUMBER()函数用于为查询结果集中的每一行分配一个唯一的数字序列。这个...

    SQL Server 2005中ROW_NUMBER()函数在存储过程分页中的应用.pdf

    此外,`ROW_NUMBER()`函数还有其他窗口函数,如`RANK()`和`DENSE_RANK()`,它们在某些场景下可能会提供更灵活的解决方案。但在这里,我们主要关注`ROW_NUMBER()`在分页中的应用。 总结起来,`ROW_NUMBER()`函数在...

    [sql server]SQL Server2005杂谈(3):四个排名函数的比较.doc

    SQL Server 2005 中提供了四个排名函数,分别是 row_number、rank、dense_rank 和 ntile。这四个函数的主要功能是为查询结果生成一个序号,用于实现查询指定范围的记录或实现分页功能。 一、row_number 函数 row_...

    "rank()、dense_rank()和row_number()的区别"score.txt

    “rank()、dense_rank()和row_number()的区别”文章的date

    ORACLE_OVER函数

    OVER函数通常与窗口函数(如RANK(), DENSE_RANK(), ROW_NUMBER(), SUM(), AVG()等)一起使用。其基本语法形式如下: ```sql <window_function> OVER ( [window_spec] ) ``` 其中`<window_function>`代表具体的窗口...

    SQL server中row_number(),rank(),dense_rank()排序

    `row_number()`, `rank()`, 和 `dense_rank()` 是三个重要的窗口函数,用于为查询结果集中的每一行分配唯一的序列号,常用于分组、排名或者实现分区排序。下面我们将详细探讨这三个函数的区别和用法。 1. `row_...

    ROW_NUMBER(),RANK()和DENSE_RANK()之间的区别

    ROW_NUMBER()、RANK()和DENSE_RANK()是其中的三个关键函数,它们都用于对数据进行排序并分配唯一的序列号,但各有其特点和适用场景。以下是对这三个函数的详细解释: 1. ROW_NUMBER() ROW_NUMBER()函数为每一行提供...

Global site tag (gtag.js) - Google Analytics