rank()对表中的数据进行分级排序.
譬如有张学生成绩统计单的表STUDENT_RESULT
name number kemu fenshu
li 0113101 高数 90
zhang 0113098 高数 80
wang 0113077 高数 70
li 0113101 物理 80
zhang 0113098 物理 90
wang 0113077 物理 70
我如果要检索出表中高数的前两名和物理的前两名
那么可以通过使用 RANK()方法达到目的
--首先 通过kemu进行分类,然后按照fenshu降序排序
select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t
结果
rk name number kemu fenshu
1 li 0113101 高数 90
2 zhang 0113098 高数 80
3 wang 0113077 高数 70
1 zhang 0113098 物理 90
2 li 0113101 物理 80
3 wang 0113077 物理 70
--然后,检索出rk<=2的记录,即取出前两名
select * from (select rank() over(partition by kemu order by fenshu desc) rk,t.* from student_result t) as y where y.rk<=2;
结果
rk name number kemu fenshu
1 li 0113101 高数 90
2 zhang 0113098 高数 80
1 zhang 0113098 物理 90
2 li 0113101 物理 80
dense_rank()和 rank()的用法完全相同,不同的是在出现分数相同的情况下
如
name number kemu fenshu
li 0113101 高数 80
zhang 0113098 高数 80
wang 0113077 高数 70
li 0113101 物理 80
zhang 0113098 物理 90
wang 0113077 物理 70
select rank() over(order by fenshu desc) rk,t.* from student_result t
的结果为
rk name number kemu fenshu
1 zhang 0113098 物理 90
2 li 0113101 高数 80
2 zhang 0113098 高数 80
2 li 0113101 物理 80
5 wang 0113077 高数 70
5 wang 0113077 物理 70
而select dense_rank() over(order by fenshu desc) rk,t.* from student_result t
结果为
rk name number kemu fenshu
1 zhang 0113098 物理 90
2 li 0113101 高数 80
2 zhang 0113098 高数 80
2 li 0113101 物理 80
3 wang 0113077 高数 70
3 wang 0113077 物理 70
附 row_number()的使用
select row_number() over(order by fenshu desc) rk,t.* from student_result t
rk name number kemu fenshu
1 zhang 0113098 物理 90
2 li 0113101 高数 80
3 zhang 0113098 高数 80
4 li 0113101 物理 80
5 wang 0113077 高数 70
6 wang 0113077 物理 70
fetch n rows only
取出当前记录的前多少行
如
select row_number() over(order by user_no) from user_files fetch first 5 rows only;
分享到:
相关推荐
Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...
在这个场景中,我们将深入探讨`RANK()`和`DENSE_RANK()`以及`MIN()`和`MAX()`在`OVER (PARTITION BY ..)`中的应用。 首先,让我们来看`RANK()`和`DENSE_RANK()`。这两种函数都是用来对分区内的数据进行排名,但是...
DENSE_RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS rank FROM students WHERE DENSE_RANK() OVER (PARTITION BY subject ORDER BY score DESC) ; ``` #### 三、分析函数:`OVER`子句 **1. `...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
在Oracle数据库中,`RANK()`, `OVER()`, `PARTITION BY` 是窗口函数的重要组成部分,它们在数据处理和分析中发挥着至关重要的作用。本文将深入探讨这些函数的用法,通过实例来帮助理解它们的功能和应用场景。 首先...
本文将详细介绍Oracle中的`OVER`子句以及几种常用的开窗函数,包括`ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`和`LAG()`等。 #### 二、基本概念 - **`OVER`子句**:`OVER`子句用于指定分析函数的作用范围,它可以...
在Oracle数据库中,`RANK()`函数是一种窗口函数,它被用于在一组数据中为每一行分配一个唯一的排名。此函数特别适用于需要基于特定条件对数据进行排序并为每个记录分配一个名次的情况。在本篇文章中,我们将深入探讨...
在oracle中,有rank,dense_rank,row_number,以及分组排名partition。 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,...
在Oracle数据库中,`OVER (PARTITION BY ...)` 是一种非常强大的功能,它允许用户在数据集上进行窗口操作。这在数据分析、报表制作以及复杂查询中极为常见。 #### 二、开窗函数简介 开窗函数(Window Functions)...
例如,在文档中的例子select deptno, dense_rank() over (partition by deptno order by sal desc) drk, ename, sal from emp中,同样是按照部门编号进行分组,并在每个分组内按薪资降序进行排序,返回排名drk。...
ROW_NUMBER () OVER([partition_clause] order_by_clause) dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从...
DENSE_RANK() OVER (PARTITION BY NET_TYPE ORDER BY LOCAL_FARE DESC) as DENSE_RANK, ROW_NUMBER() OVER (PARTITION BY NET_TYPE ORDER BY LOCAL_FARE DESC) as ROW_NUMBER FROM t; ``` 3. LAG, LEAD LAG和LEAD...
SELECT DEPTNO, SAL, RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL) AS RANK_ORDER FROM SCOTT.EMP ORDER BY DEPTNO; ``` 结果如下: | DEPTNO | SAL | RANK_ORDER | |--------|-------|------------| ...
OVER函数通常与窗口函数(如RANK(), DENSE_RANK(), ROW_NUMBER(), SUM(), AVG()等)一起使用。其基本语法形式如下: ```sql <window_function> OVER ( [window_spec] ) ``` 其中`<window_function>`代表具体的窗口...
- **rank()**, **dense_rank()** 和 **row_number()**: 用于排序,分别返回唯一的排名、无间隙的排名和行号。 - **lag()** 和 **lead()**: 提供对当前行前一行或后一行的访问,常用于时间序列分析。 - **rollup()** ...
DENSE_RANK() OVER (PARTITION BY t.class ORDER BY t.score DESC) AS dense_rank FROM t_student_score t ORDER BY t.class; ``` 观察结果,可以看到相同分数的学生在`DENSE_RANK()`中将拥有相同的排名,而在`...
SELECT empno, ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS rank_by_sal FROM emp; ``` 这里,`RANK()`会为每一组相同的工资值分配一个不同的排名,而`DENSE_RANK()`则会给相同工资值的记录分配相同的...
根据提供的文件信息,我们可以深入探讨Oracle分析函数的相关知识点,特别是`SUM()`函数配合`OVER`子句的不同用法,以及`RANK()`, `DENSE_RANK()`, 和 `ROW_NUMBER()` 这三个窗口函数的应用场景。 ### Oracle分析...