oracle sql rank dense_rank row_number fisrt last
測試表emp
RANK
SQL> select EMPNO,DEPTNO,SAL,
2 rank()over(partition by DEPTNO order by SAL) "rank"
3 from emp;
EMPNO DEPTNO SAL rank
---------- ---------- ---------- ----------
7934 10 1300 1
7782 10 2450 2
7839 10 5000 3
7369 20 800 1
7876 20 1100 2
7566 20 2975 3
7788 20 3000 4
7902 20 3000 4
7900 30 950 1
7654 30 1250 2
7521 30 1250 2
7844 30 1500 4
7499 30 1600 5
7698 30 2850 6
14 rows selected.
按照deptno分組sal升序排列,這裡注意到deptno=30的sal=1250的兩個僱員,並列在該組中排名第2。然後下一個就是第4名。
What we see here is where two people have the same salary they are assigned the same rank. When multiple rows share the same rank the next rank in the sequence is not consecutive
如果兩個人有相同的salary,就分配相同的排名。多行共享了相同的排名之後,下一個排名在順序上是不連續的。
要和後面的dense_rank(),row_number()區分。
DENSE_RANK
The DENSE_RANK
function acts like the RANK
function except that it assigns consecutive ranks.
DENSE_RANK函數和RANK函數相似,如果有多個人有相同的salary,會分配same rank,不同之處在于下一個排名在順序上是連續的。
SQL> select EMPNO,DEPTNO,SAL,
2 dense_rank()over(partition by DEPTNO order by SAL) "rank"
3 from emp;
EMPNO DEPTNO SAL rank
---------- ---------- ---------- ----------
7934 10 1300 1
7782 10 2450 2
7839 10 5000 3
7369 20 800 1
7876 20 1100 2
7566 20 2975 3
7788 20 3000 4
7902 20 3000 4
7900 30 950 1
7654 30 1250 2
7521 30 1250 2
7844 30 1500 3
7499 30 1600 4
7698 30 2850 5
14 rows selected.
ROW_NUMBER
row_number函數的區別在於,當多個人有相同的salary的時候并不會共享rank,而是連續的分配rank。not same rank,not consecutive
SQL> select EMPNO,DEPTNO,SAL,
2 row_number()over(partition by DEPTNO order by SAL) "rank"
3 from emp;
EMPNO DEPTNO SAL rank
---------- ---------- ---------- ----------
7934 10 1300 1
7782 10 2450 2
7839 10 5000 3
7369 20 800 1
7876 20 1100 2
7566 20 2975 3
7788 20 3000 4
7902 20 3000 5
7900 30 950 1
7654 30 1250 2
7521 30 1250 3
7844 30 1500 4
7499 30 1600 5
7698 30 2850 6
14 rows selected.
FIRST and LAST
The FIRST
and LAST
functions can be used to return the first or last value from an ordered sequence
用於返回first 或者last value
SQL> select EMPNO,DEPTNO,SAL,
2 min(sal)keep(dense_rank first order by sal )over(partition by DEPTNO) "Lowest",
3 max(sal)keep(dense_rank last order by sal )over(partition by DEPTNO) "Highest"
4 from emp;
EMPNO DEPTNO SAL Lowest Highest
---------- ---------- ---------- ---------- ----------
7782 10 2450 1300 5000
7839 10 5000 1300 5000
7934 10 1300 1300 5000
7566 20 2975 800 3000
7902 20 3000 800 3000
7876 20 1100 800 3000
7369 20 800 800 3000
7788 20 3000 800 3000
7521 30 1250 950 2850
7844 30 1500 950 2850
7499 30 1600 950 2850
7900 30 950 950 2850
7698 30 2850 950 2850
7654 30 1250 950 2850
14 rows selected.
下面這種寫法,返回結果和上面一樣。
SQL> select EMPNO,DEPTNO,SAL,
2 min(sal)over(partition by DEPTNO) "Lowest",
3 max(sal)over(partition by DEPTNO) "Highest"
4 from emp;
EMPNO DEPTNO SAL Lowest Highest
---------- ---------- ---------- ---------- ----------
7782 10 2450 1300 5000
7839 10 5000 1300 5000
7934 10 1300 1300 5000
7566 20 2975 800 3000
7902 20 3000 800 3000
7876 20 1100 800 3000
7369 20 800 800 3000
7788 20 3000 800 3000
7521 30 1250 950 2850
7844 30 1500 950 2850
7499 30 1600 950 2850
7900 30 950 950 2850
7698 30 2850 950 2850
7654 30 1250 950 2850
14 rows selected.
2016-04-13
oracle sql rank dense_rank row_number fisrt last的更多相关文章
- [转]oracle分析函数Rank, Dense_rank, row_number
oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number) 目录 ==================== ...
- Oracle分析函数 — rank, dense_rank, row_number用法
本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course nva ...
- oracle分析函数Rank, Dense_rank, row_number
http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录=============================== ...
- Oracle 的开窗函数 rank,dense_rank,row_number
1.开窗函数和分组函数的区别 分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算. 开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据 ...
- rank,dense_rank,row_number使用和区别
rank,dense_rank,row_number区别 一:语法(用法): rank() over([partition by col1] order by col2) dense ...
- 【DB2】DB2中rank(),dense_rank(),row_number()的用法
1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...
- [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同
转自:http://blog.csdn.net/s630730701/article/details/51902762 在SCOTT用户下,执行下面SQL; SELECT s.deptno,s.ena ...
- rank() | dense_rank() | row_number() over(PARTITION BY sex order by age desc ) 的区别
1.row_num() over()函数:根据某个字段排序后编号1,2,3.. select *,ROW_NUMBER() over ( order by majorid) as numfrom St ...
- Oracle 排序分析函数之ROW_NUMBER、RANK和DENSE_RANK
我们都知道分析函数功能很强大,可能需要写很复杂的标准SQL才能办到或不可能办到的事,使用分析函数却能很容易完成.我们经常会用到排序分析函数,如ROW_NUMBER,RANK,DENSE_RANK.这三 ...
随机推荐
- python gui之tkinter语法杂记
随手写的,后续整理. 1. Entry如何调用父类的__init__? 以下错,原因后续分析 super(Your_Entry_Class, self).__init__(self,**kw) 报错: ...
- ocket.chat 使用 Meteor 开发的实时协作工具,类似 丁丁。
ocket.chat 使用 Meteor 开发的实时协作工具,类似 丁丁. https://rocket.chat/
- Unity3d 检查哪些prefab引用了某个UIAtlas
适用情景:策划在用NGUI制作UI prefab时经常会使用一些临时的Atlas,然后再想改就不知道都哪些使用了.现在想修改下使用临时资源的GameObject 使用方式,先选中某个prefab或者某 ...
- Java for LeetCode 225 Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- code vs1506传话(塔尖)+tarjan图文详解
1506 传话 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到 ...
- 常用js学习
http://www.cnblogs.com/qiantuwuliang/tag/js/
- 快速入门GreenDao框架并实现增删改查案例
大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...
- [聊天框]让DIV的滚动条自动滚动到最底部 - 4种方法
要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息. 聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条. ...
- log4j介绍以及使用教程
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接 口服务 器.NT的事件记录器.UNIX Syslog ...
- Mysql之INFORMATION_SCHEMA解析1
INFORMATION_SCHEMA库是Mysql提供的一个系统库,保存了数据库的原数据,方便用户监控与管理Msyql. 现在单说与INNODB相关的库:INNODB_SYS_TABLES,INNOD ...