今天看到有位同事的sql中使用了“RANK() over partition BY order by ”的语句,以前自己没使用过,
将百度结果也一并保存下来以备忘。
sql 原文:
SELECT *
FROM
(SELECT BC.SECUCODE 债券代码,
BC.CHINAME 债券名称,
TO_CHAR(BC.LISTEDDATE, 'yyyy-mm-dd') 债券上市日期,
BC.ISSUER 发行人,
RANK() over(partition BY BC.ISSUER order by BC.LISTEDDATE DESC) RANK_NO
FROM
(SELECT DISTINCT JBC.MAINCODE,
JBC.CHINAME,
JBC.ISSUER,
JBC.SECUCODE SECUCODE,
JBC.LISTEDDATE LISTEDDATE
FROM ABC.BOND_CODE JBC
WHERE TRIM(JBC.ISSUER) NOT IN
(SELECT DISTINCT TRIM(JLS.CHINAME)
FROM JUYUAN.LC_STOCKARCHIVES JLS)
) BC
)
WHERE rank_no <= 3
百度查询资料:
oracle的几个排序函数
ref url:http://blog.csdn.net/lky5387/archive/2009/12/09/4972512.aspx
rank 根据order by排名 会出现并列排名。下一个值会跳过并列值 比如 1 2 2 4 5
通常对应rank还有 desc_rank 出现并列排名以后,下一个值不跳过并列值 1 2 2 3 4
row_number 就是直接排出一个名次。不会出现并列排名 1 2 3 4 5
这三个分析函数都可以在各个分组内从1开始排序。
ROW_NUMBER()是没有重复值的,可以利用它实现分页显示。
DENSE_RANK()是连续排序,有两个第二名时仍然跟着第三名。
RANK()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)。
SELECT * FROM (
SELECT deptno, ename, sal, ROW_NUMBER()
OVER (
PARTITION BY deptno ORDER BY sal DESC
) Top3 FROM emp
)
WHERE Top3 <= 3
/
DEPTNO ENAME SAL TOP3
---------- ---------- ---------- ----------
10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 3000 1
20 FORD 3000 2
20 JONES 2975 3
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
9 rows selected.
SELECT * FROM (
SELECT deptno, ename, sal, DENSE_RANK()
OVER (
PARTITION BY deptno ORDER BY sal DESC
) TopN FROM emp
)
WHERE TopN <= 3
ORDER BY deptno, sal DESC
/
DEPTNO ENAME SAL TOPN
---------- ---------- ---------- ----------
10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 3000 1 <--- !
20 FORD 3000 1 <--- !
20 JONES 2975 2
20 ADAMS 1100 3
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
10 rows selected.
SELECT * FROM (
SELECT deptno, ename, sal, RANK()
OVER (
PARTITION BY deptno ORDER BY sal DESC
) TopN FROM emp
)
WHERE TopN <= 3
ORDER BY deptno, sal DESC
/
DEPTNO ENAME SAL TOPN
---------- ---------- ---------- ----------
10 KING 5000 1
10 CLARK 2450 2
10 MILLER 1300 3
20 SCOTT 3000 1 <--- !
20 FORD 3000 1 <--- !
20 JONES 2975 3
30 BLAKE 2850 1
30 ALLEN 1600 2
30 TURNER 1500 3
分享到:
相关推荐
`ROW_NUMBER()`函数是Oracle数据库中一个非常强大的工具,特别是在需要对数据进行分组和排序时。通过掌握其基本用法以及与其他窗口函数的结合使用,可以在数据处理和分析方面发挥重要作用。无论是简单的排序还是复杂...
Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从...
RANK、DENSE_RANK、ROW_NUMBER、GROUP BY、ORDER BY,用于数据的排序和分组。RANK、DENSE_RANK和ROW_NUMBER提供行号,GROUP BY用于对数据进行分组,ORDER BY则对结果进行排序。 这些只是Oracle函数中的一部分,...
在上述信息中,提到了几个关键的分析函数:RANK()、ROW_NUMBER()和LAG(),下面将详细阐述这些函数的使用方法和特点。 1. **ROW_NUMBER()** ROW_NUMBER()函数用于为每个分组内的行分配一个唯一的序列号,这个编号是...
DENSE_RANK 函数用于计算行的相对排序,相同的值具有一样的序数。 3.8 FIRST_VALUE 函数 FIRST_VALUE 函数用于获取一个组的第一个值。 3.9 LAG 函数 LAG 函数用于访问之前的行。 3.10 LAST_VALUE 函数 LAST_...
- **rank()** 和 **dense_rank()**:与 `row_number()` 类似,但当遇到相同排序值时,`rank()` 会跳过一些行号,而 `dense_rank()` 不会。 #### 拓展应用 - **数据排名**:可以使用 `row_number()` 来确定数据集中...
`ROW_NUMBER()`函数为每个分区内的行分配一个连续的编号,即使有多个行具有相同的排序值,每个行也会获得不同的编号。因此,`ROW_NUMBER()`在所有情况下都提供了一个连续的数字序列,没有重复或跳过。 ### 实际应用...
ROW_NUMBER()函数为每一行分配一个唯一的整数,通常用于排序后的结果集。这个数字从1开始递增,对于每个新的分组或排序顺序,数字会重新开始。例如,以下SQL语句将返回每个部门员工的编号: ```sql SELECT ...
- 分析函数包括`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`、`LEAD()`、`LAG()`等。 - `OVER`子句可以包括`PARTITION BY`、`ORDER BY`和`ROWS`或`RANGE`之间的范围。 **2. `ROW_NUMBER()`、`RANK()`、`DENSE_RANK...
1. **等级函数**:如`RANK`, `DENSE_RANK`, `ROW_NUMBER`等,用于对数据进行排序和排名。 2. **窗口函数**:如`SUM`, `COUNT`, `AVG`, `MIN`, `MAX`等,用于在特定的数据窗口上进行统计计算。 3. **报表函数**:与...
- RANK/DENSE_RANK/ROW_NUMBER:为每组内的行提供唯一的排名。 - ORDER BY:对查询结果进行排序。 8. **连接查询相关函数** - JOIN:连接两个或更多表以检索数据。 - UNION/UNION ALL:合并来自多个SELECT语句...
除了AVG和CORR,Oracle还提供了其他分析函数,如LEAD/LAG(获取当前行的前/后一行数据)、RANK/DENSE_RANK/ROW_NUMBER(为每一行分配唯一的排名)、PERCENT_RANK/CUME_DIST(计算百分位或累积分布)、MIN/MAX(按...
3. **Row_Number()**:这个函数为每个分组内的行分配一个唯一的数字,根据指定的排序规则(如果有partition by,会在每个分区内部进行排序)。 下面是一个示例,展示了这三个函数如何应用于数据: ```sql with lcy...
本次介绍的是几个常用的Oracle统计函数:row_number()、rank()和dense_rank()。 首先,row_number()函数会为查询结果集中的每一行分配一个唯一的连续整数序列号。这个数字是根据ORDER BY子句中定义的顺序进行排序的...
本文将重点讨论评级函数的使用,包括RANK()、DENSE_RANK()、CUME_DIST()、PERCENT_RANK()和NTILE(),以及ROW_NUMBER()。 1. RANK() 函数: RANK()函数用于根据指定的排序条件计算行的排名。如果在排序列中有相同的...